Provided by: bear_1.4-1_amd64 bug

NAME

       bear - build ear

SYNOPSIS

       bear [options] -- [build commands]

DESCRIPTION

       Bear is a tool to generate compilation database for clang tooling.

       The  JSON compilation database (http://clang.llvm.org/docs/JSONCompilationDatabase.html) is used in clang
       project to provide information how a single compilation unit was processed.  When that is available  then
       it is easy to re-run the compilation with different programs.

       Bear  execs  the  original  build  command  and  intercept  the exec calls.  To achive that Bear uses the
       LD_PRELOAD or DYLD_INSERT_LIBRARIES mechanisms provided by the dynamic linker.  There is a library  which
       defines  the  exec methods and used in every child processes of the build command.  The executable itself
       sets the environment up to child processes and writes the output file.

OPTIONS

       -c config
              Specify config file.  Default value provided.

       -o output
              Specify output file.  Default value provided.  (This option mainly for development purposes.)

       -l library
              Specify the preloaded  library  location.   Default  value  provided.   (This  option  mainly  for
              development purposes.)

       -s socket
              Specify UNIX socket file.  Default value provided.  (This option mainly for development purposes.)

       -n     Disable  filter.   The  output  is  also a JSON formated file. But the result is not a compilation
              database. It contains all available information of  the  exec  calls.   (This  option  mainly  for
              development purposes.)

       -x     Verbose  filter  dump  at  the end.  This option dump a short statistic about the filtering. Might
              give some insight when the output is not what it expected or when config file were changed.

       -v     Print out Bear version and exit.

OUTPUT

       There are two version of output formats.  One is defined by the clang tooling.  This goes like this:

              [
                { "directory": "/home/user/llvm/build",
                  "command": "clang++ -Irelative -c -o file.o file.cc",
                  "file": "file.cc" },
                ...
              ]

       To achive this bear has to run some filtering and formating.  Build tools exec many commands  during  the
       build process.  Bear has to find was that a compiler call, and what was the source file?

       Filtering has three steps.  It checks the executable name agains the known compiler names.  It checks any
       of the arguments to match as source file.  (Usually done by extension match.) And checks that there is no
       parameter which might considered as non compilation.  (Like dependency file generation, which migth cause
       duplicates in the output.)

       Filters  are  specified  in  the  config  file.   The  syntax  of   the   file   defined   by   libconfig
       (http://www.hyperrealm.com/libconfig/).   The  filter  values  are  extended  POSIX  regular  expressions
       (http://en.wikipedia.org/wiki/Regular_expression).

       Since the post process might be buggy, there is a way to see all exec calls.  This gives  opportunity  to
       write custom post processing.  The format of the non filtered output looks like this:

              [
                { "pid": "1234",
                  "ppid": "100",
                  "function": "execve",
                  "directory": "/home/user/llvm/build",
                  "command": "clang++ -Irelative -c -o file.o file.cc" },
                ...
              ]

       Both  output  is JSON format, which means that command field is escaped if one of the argument had space,
       slash or quote character.  All the other fields are as it was captured.

EXIT STATUS

       Bear exit status is the exit status of the build command.  Except when bear crashes, then it sets to  non
       zero.

ENVIRONMENT

       BEAR_OUTPUT
              The  place  of the socket file where client shall report exec calls.  Value set by bear, overrides
              previous value for child processes.

       LD_PRELOAD
              Used by the dynamic loader on Linux, FreeBSD and other UNIX OS.   Value  set  by  bear,  overrides
              previous value for child processes.

       DYLD_INSERT_LIBRARIES
              Used  by  the  dynamic  loader  on  OS  X.   Value set by bear, overrides previous value for child
              processes.

       DYLD_FORCE_FLAT_NAMESPACE
              Used by the dynamic loader on OS X.  Value  set  by  bear,  overrides  previous  value  for  child
              processes.

FILES

       /etc/bear.conf
              bear configuration file for post processing.

       /usr/lib/x86_64-linux-gnu/bear/libear.so
              bear library to implement exec calls.

SEE ALSO

       ld.so(8), exec(3)

BUGS

       Compiler  wrappers  like  ccache (http://ccache.samba.org/) and distcc (http://code.google.com/p/distcc/)
       could cause duplicates or missing items in the compilation database.  Make sure you  have  been  disabled
       before you run Bear.

COPYRIGHT

       Copyright (C) 2012-2014 by László Nagy <https://github.com/rizsotto/Bear>

AUTHORS

       László Nagy.