Provided by: yotta_0.20.0-1_all bug

NAME

       yotta - build system for C/C++ projects focussed on reusable components

SYNOPSIS

       yotta [GLOBAL_OPTION] COMMAND [OPTION]
       yotta [COMMAND] --help
       yotta --version

DESCRIPTION

       yotta  is  a  build  system designed to help developers build better software for C-family
       languages by making it easier to share and re-use software modules.

       yotta supports project compilation with different  compilers  by  specifying  targets  for
       compilation.  Each compilation target can have its own specific requirements.

OPTIONS

       yotta   supports   both   global   arguments  (that  work  for  all  yotta  commands)  and
       command-specific options.

       [GLOBAL_OPTION] COMMAND [OPTION]
              run the specified COMMAND with the optional global and command-specific options

       [COMMAND] --help
              when no command is given, display help for yotta, including a list of  subcommands;
              when an optional command is given, display help for the specified subcommand

       --version
              display the current version and exit

GLOBAL OPTIONS

       yotta supports the following global arguments for all commands listed below:

       --plain subcomman>
              don’t use coloured output

       --noninteractive subcommand
              don’t wait for user input

       --target targetname
              override  currently-set  target  for  this  command  (useful when isolating several
              instances of yotta)

       --config configfile|JSON
              override target  and  application-defined  configuration;  this  is  useful  in  CI
              infrastructure to easily change the configuration for a particular build

MODULES

       yotta can use two types of modules:

       Library Modules
       Executable Modules

   Library Modules
       Library modules are reusable code, which provide functionality useful to lots of different
       apps such as network stacks, drivers and encoders/decoders.  Anyone can publish a  library
       module to the yotta registry where other people can find useful modules and reuse them.

   Executable Modules
       Executable  modules  compile  into  a  binary.  Executable modules should not generally be
       published to the yotta registry because they cannot be reused by other  applications,  and
       instead are typically made available on code-hosting sites such as Gitlab and Github.

TARGETS

       Targets describe which platform you are building for, and how the compiler should be run.

SEMANTIC VERSIONING

       yotta  modules  use  semantic  versioning.  A 0.x.y version number indicates a module that
       does not yet have a stable API.  When the API is stable the version number is  incremented
       to 1.0.0.

       For  modules  with  a  major  version  >=  1, the major version number must be incremented
       whenever backwards-incompatible changes are made.  The minor and patch versions  are  used
       for new backwards-compatible features and bug-fixes respectively.

COMMANDS

   init
              yotta init

       Create  a  new  module.json  module-description  file  based  on a set of questions.  If a
       module.json file already exists, the values in it will be used as defaults,  and  it  will
       not delete anything from the file.

   build
              yotta build [--generate-only] [--debug-build] [--cmake-generator <cmake-generator-name>] [name ... ]
              yotta build [ ... ] -- [ build-tool arguments ]

       Build the current module and its dependencies.  Missing dependencies will be automatically
       installed first.

       If no name arguments are specified then the current module’s tests will be built, but  not
       the  tests  for  any  other  module.  Use yotta build all_tests to build the tests for all
       dependency modules.

       yotta uses CMake to control the build.  The basic process is:

       1. yotta installs the target description for the build target

       2. yotta installs all module dependencies (which may depend on which target is being built
          for)

       3. yotta generates CMakeLists.txt describing the libraries and executables to build

       4. yotta  instructs  CMake  to  generate  the  make files / ninja files / IDE project file
          (depending on --cmake-generator)

       5. yotta instructs CMake to execute the build.  The compiler used  depends  on  the  CMake
          Toolchain file provided by the active yotta target.

       For more information on the yotta build process, see the build system reference.

       Options

       --generate-only, -g
              only generate CMakeLists, don’t build

       --debug-build, -d
              build  a  debug  (less-optimised)  build.   The  effects depend on the target (this
              selects CMake build type Debug), but generally  this  means  no  optimisation,  and
              NDEBUG is not defined.

       --release-build, -r
              build  a  release (optimised) build (deprecated).  The effects depend on the target
              (this selects CMake build type RelWithDebInfo).  This option is deprecated  because
              it is now the default, unless --debug-build is specified.

       --cmake-generator, -G
              specify  the CMake Generator.  CMake can generate project files for various editors
              and IDEs

       name ...
              one or more modules may be specified, in which case only these  modules  and  their
              dependencies will be built.  Use all_tests to cause all tests to be built.

       -- option1, option2, ...
              any  options specified after -- are passed unmodified on to the tool being used for
              building (e.g. Ninja, or make)

       Generating IDE Project Files

       The -G/--cmake-generator option can be used to generate project files for various IDE  and
       text  editors.   This  option  is  passed through to CMake, but note that only IDE project
       files which use Ninja or Makefile build systems will correctly  support  cross-compilation
       for yotta targets.

       To see the CMake generators available on your platform see cmake --help.

       Examples

       Build this module and its tests:

              yotta build

       Build the tests for all dependencies:

              yotta build -d all_tests

       Generate IDE project files:

              yotta build -d -G "Sublime Text 2 - Ninja"
              yotta build -d -G "Eclipse CDT4 - Ninja"

       Pass options through to the build system:

              yotta build -G "Unix Makefiles" -- -j 4
              yotta build -- -v

   search
              yotta search <string> [--keyword=<keyword>] [--limit=<N>]
              yotta search module <string> [--keyword=<keyword>] [--limit=<N>]
              yotta search target <string> [--keyword=<keyword>] [--limit=<N>]

       Search  for  open-source  yotta  modules and build targets that have been published to the
       yotta registry.

       The results will be listed in combined order of search relevance and popularity.

       Options

       --keyword, -k
              specify keywords to constrain the search (use multiple times for multiple keywords,
              modules returned will have all of the specified keywords)

       --limit, -l
              limit the number of results returned

       Examples

              yotta search logging
              yotta search module logging
              yotta search target -k mbed-official -k mbed-target:k64f

   test
              yotta test [--list] [--no-build] [ build-arguments ] [tests-to-run ...]

       Run  tests.   If no arguments are specified, then the tests for the current module will be
       run, use yotta test all to run the tests for all modules.

       The target description provides support for the test command if it  is  a  cross-compiling
       target (no support is necessary to run tests natively).

       The scripts.test value in the target description is executed with $program expanded to the
       path to the binary, it should be a wrapper script that loads the binary at  the  specified
       path onto the target device, runs it, and prints output on standard output.

       Options

       --list, -l
              list the tests that would be run, rather than running them.  Implies --no-build.

       --no-build, -n
              don’t  build anything, try to run already-built tests.  Things will fail if all the
              specified tests are not built!

       This command also accepts the options to yotta build, which are used if building.

       Examples

              yotta test
              yotta test --list all
              yotta test -n my-test
              yotta test --config="path/to/test-config.json"

   debug
              yotta debug <program>

       If the target description supports  it,  launch  a  debugger  attached  to  the  specified
       executable.

       Examples

              yotta debug test/simplelog-test
              yotta debug source/helloyotta

   target
              yotta target
              yotta target <targetname>[@url-or-version-spec] [-g] [-n]

       Display  or  set the current target.  yotta will look for and install a target description
       from the yotta registry when building or installing dependencies.  If you run yotta target
       in  an  existing module yotta will attempt to download the target description immediately,
       unless -n is specified.

       Targets  define  the  options  and  commands  that  yotta  uses  to  compile  modules  and
       executables.

       A target must define a CMake Toolchain file describing all of the rules that yotta uses to
       build software; it may also define commands to launch a debugger (used by yotta debug).

       If -g is specified when setting the target,  it  will  be  saved  globally  (in  the  user
       settings file).  Otherwise the specified target will be saved for the current module only,
       in a .yotta.json file.

       If the target is set both locally and globally, the locally-set target takes precedence.

       Examples

              yotta target x86-osx-native
              yotta target frdm-k64f-gcc@^2.0.0

   install
       Synonyms: yotta in

              # in a module directory:
              yotta install
              yotta install <module>[@<version>]

              # GitHub usage
              yotta install <username>/<reponame>
              yotta install <username>/<reponame>#<version|tagname|branchname|commit>

              # anywhere:
              yotta install <module>[@<version>] [--global]

       Install a module, including the modules that it depends on.

       Typical usage is:

              yotta install <module>

       which installs <module> and its  dependencies,  and  saves  it  in  the  current  module’s
       description file.

       A <module> is one of:

       • a  name,  in  which  case  the  module  is  installed  from  the  public  yotta registry
         (https://yottabuild.org)

       • a github spec (username/reponame), in which case the module is installed  directly  from
         github.  This can include private github URLs.

       yotta install (no arguments, in a module folder)

       In  a  module directory, yotta install will check for and install any missing dependencies
       of the current module.

       Options:

       --install-linked
              also traverse into any linked modules, and install their dependencies.  By  default
              linked  modules  are  not modified.  Note that without this option all the required
              dependencies to build may not be installed.

       yotta install (in a module folder)

       In a module directory, yotta install <module> will install the specified module,  and  any
       missing dependencies for it.

       The  installed  version  of  the  module  will  be  saved as a dependency into the current
       module’s module.json file.  This uses the ^ semantic-version  specifier  to  specify  that
       only  minor  version  updates  are  allowed to be installed, unless the module has a 0.x.x
       version number, in which case the ~ semantic-version specifier is used restrict updates to
       patch versions only.

       yotta install /

       Install  the  specified  module and any missing dependencies in a similar manner to above,
       using GitHub as the source.

       When a version isn’t specified, yotta will attempt to select the  latest  release  version
       from  the  tags available on the repository.  If none are found, the master branch will be
       installed.

       yotta install /#<version|tagname|branchname|commit>

       Install the specified module and any missing dependencies in a similar  manner  to  above,
       using GitHub as the source.

       An optional version specification (which tries to match repository tags using semver), tag
       name, branch name or commit ID can be specified  to  install  the  repository  using  that
       marker.

       yotta install (anywhere)

       Download  the  specified  dependency,  and  install  it  in  a subdirectory of the current
       directory.

       Options:

       --global
              install the specified module into the global modules directory instead.

       Examples

              yotta install simpleog
              yotta install ARM-RD/simplelog

   update
       Synonyms: yotta up

              yotta update
              yotta update <module>

       Update all of the current modules dependencies to the latest matching versions.  Or, if  a
       module is specified, update only that module and its dependencies.

       Options

       --update-linked
              update the dependencies of linked modules too.

   version
       Synonyms: yotta v

              yotta version [patch | minor | major | <version>]

       Bump  the  current  module’s  version,  set a new version, or display the current version.
       patch, minor and major declare which part of the major.minor.patch version number to bump.

       If the current module is version-controlled by mercurial or git, then the new  version  is
       tagged.   If the module is version controlled but the working directory is not clean, then
       an error message is printed.

   login
              yotta login

       Authenticate with the yotta registry.  yotta will open a browser to an OAuth login page on
       the  yotta  registry,  where you can then log in with either GitHub or mbed.  This process
       generates a secret access token that is saved in your yotta configuration file, and  which
       yotta can use to pull from private repositories that you have access to on GitHub or mbed.

       You must log in before you can publish modules.  Access control for publishing is based on
       email addresses verified by GitHub/mbed, you can see the email address of the owners  with
       permission to publish a given module using the yotta owners command.

       No  information  other  than  your email address, and a public key generated by your yotta
       client, is stored by the yotta registry.  Even someone with access to the yotta registry’s
       database  would  not  be able to publish modules in your name without stealing information
       that never leaves your computer!

   logout
              yotta logout

       Remove all saved authentication information from the current computer.   Does  not  revoke
       access tokens, as GitHub returns the same access token for each computer that you log into
       yotta on.  If you wish to revoke access tokens you can do so on your GitHub account page.

   whoami
              yotta whoami
              yotta who

       Display the primary email address(es) that you are currently authenticated to.  If you are
       not  logged  in then this will return a non-zero status code, otherwise the status code is
       0.

       Examples

              $ yotta whoami
              friend@example.com

              $ yotta logout
              $ yotta whoami
              not logged in

   publish
              yotta publish

       Publish   the   current   module   or   target    to    the    public    yotta    registry
       (https://yottabuild.org), where other people will be able to search for and install it.

       Any  files matching lines in the .yotta_ignore file (if present) are ignored, and will not
       be included in the published tarball.

   link
       Synonyms: yotta ln

              yotta link (in a module directory)
              yotta link <modulename>
              yotta link /path/to/a/module

       Module linking allows you to use local versions of modules when building other  modules  –
       it’s  useful  when  fixing  a bug in a dependency that is most easily reproduced when that
       dependency is used by another module.

       To link a module there are two steps.  First, in the directory of the dependency:

              yotta link

       This will create a symlink from the global modules directory to the current module.

       Then, in the module that you would like to use the linked version of the dependency, run:

              yotta link <depended-on-module-name>

       When you run yotta build it will then pick up the linked module.

       This works for direct and indirect dependencies: you can link to a module that your module
       does not use directly, but a dependency of your module does.

       The  variant  of  the  command  which  takes a path to an existing module (e.g. yotta link
       ../path/to/a/module) performs both steps in sequence, for convenience.

       Directories

       When you run yotta link, links are created in a system-wide directory under  YOTTA_PREFIX,
       and  the  links in that directory are then picked up by subsequent yotta link <modulename>
       commands.

       On Linux this defaults to /usr/local.  To change this directory (e.g. to make  yotta  link
       things into your home directory), set the YOTTA_PREFIX environment variable.

   link-target
              yotta link-target (in a target directory)
              yotta link-target <targetename>
              yotta link-target /path/to/a/target

       To link a target you need to perform two steps.  First, in the directory of the target:

              yotta link-target

       This will create a symlink from the global targets directory to the current target.

       Then, in the module that you would like to use the linked version of the target, run:

              yotta link-target <targetename>

       When  you  run  yotta build (provided you’ve set yotta target to <targetname>), the linked
       target description will be used.

       The variant of the command which takes a path  to  an  existing  module  (e.g. yotta  link
       ../path/to/a/module) performs both steps in sequence, for convenience.

       See also yotta link.

   list
       Synonyms: yotta ls

              yotta list [--all]
              yotta list [--json]

       List  the  installed  dependencies  of  the  current  module, including information on the
       installed versions.  Unless --all is specified, dependencies are  only  listed  under  the
       modules that first use them, with --all dependencies that are used my multiple modules are
       listed multiple times (but all modules  will  use  the  same  installed  instance  of  the
       dependency).

       The --json option will cause the list to be output in JSON format, for example:

              {
                "modules": [
                  {
                    "name": "toplevel-module-name",
                    "version": "1.0.0",
                    "path": "/some/path/on/disk/toplevel-module-name",
                    "specifications": [
                      {
                        "version": "~0.11.0",
                        "name": "some-dependency-name"
                      }
                    ]
                  },
                  {
                    "name": "some-dependency-name",
                    "version": "0.11.7",
                    "path": "/some/path/on/disk/yotta_modules/some-dependency-name",
                    "linkedTo": "/some/path/on/disk/some-dependency-name",
                    "specifications": [
                      {
                        "version": "ARMmbed/some-test-dependency#^1.2.3",
                        "name": "some-test-dependency",
                        "testOnly": true
                      }
                    ]
                  },
                  {
                    "name": "some-test-dependency",
                    "version": "1.5.6",
                    "path": "/some/path/on/disk/yotta_modules/some-test-dependency",
                    "errors": [
                      "a description of some error with this module"
                    ]
                  }
              }

   uninstall
       Synonyms: yotta unlink, yotta rm, yotta un

              yotta uninstall <module>

       Remove  the  specified  dependency of the current module (or destroy the symlink if it was
       linked).

   owners
       Synonyms: yotta owner

              yotta owners list [<modulename>]
              yotta owner add <email> [<modulename>]
              yotta owner remove <email> [<modulename>]

       List, add, or remove owners from the specified module or target.  Owners are  people  with
       permission to publish new versions of a module, and to add/remove other owners.

       If  the  current  directory  is  a module or target, then the module name is optional, and
       defaults to the current module.

   licenses
              yotta licenses [--all]

       List the licenses of all of the modules that the current module depends on.  If  --all  is
       specified,  then  each  unique  license is listed for each module it occurs in, instead of
       just once.

       NOTE: while yotta can list the licenses that modules have declared  in  their  module.json
       files,  it  can make no warranties about whether modules contain code under other licenses
       that have not been declared.

   config
              yotta config

       Display the merged config data for the current target (and  application,  if  the  current
       module defines an executable application).

       The  config  data  is produced by merging the json config data defined by the application,
       the current target, and any targets the current target inherits from recursively.   Values
       defined  by  the  application will override those defined at the same path by targets, and
       values defined in targets will override values defined by targets they inherit from.

       The config data displayed is identical to the data that will be available to modules  when
       they are built.

       See the yotta config system reference for more details.

   outdated
              yotta outdated

       List modules for which newer versions are available from the yotta registry.

   shrinkwrap
              yotta shrinkwrap

       Create  a  yotta-shrinkwrap.json  file  in  the  current module, which specifies the exact
       versions of dependencies and target descriptions currently being used.

       When a module with a yotta-shrinkwrap.json file is installed, the  versions  specified  in
       the  shrinkwrap  will  be downloaded from the public yotta registry, instead of the latest
       versions that satisfy the specifications from module.json files.  When a  shrinkwrap  file
       is  present,  dependencies will always be downloaded from the registry, not from git/other
       URLs.

       In practise this  allows  an  application  or  module  to  specify  a  known-good  set  of
       dependencies that it should be used with.

       Note  that  generally  publishing  modules  with a yotta-shrinkwrap.json file to the yotta
       registry should be avoided.  The exact versions specified in the shrink-wrap could  easily
       cause version conflicts with other modules which depend on the same modules.

       The format of the yotta-shrinkwrap.json file is:

              {
                "modules": [
                  {
                    "version": "1.0.0",
                    "name": "first-module-name"
                  },
                  {
                    "version": "0.11.7",
                    "name": "a-dependency-name"
                  },
                  ...
                ],
                "targets": [
                 {
                   "version": "1.2.3",
                   "name": "some-target-name"
                 },
                 ...
                ]
              }

FILES

       yotta targets:

       target.json
       .yotta_ignore
       .yotta.json

       yotta modules:

       config.json
       module.json
       .yotta_ignore
       .yotta.json

ENVIRONMENT VARIABLES

       yotta behaviour can be customised using the following environment variables:

       YOTTA_PREFIX

       YOTTA_GITHUB_AUTHTOKEN

REPORTING BUGS

       Upstream bug tracker: https://github.com/ARMmbed/yotta/issues

COPYRIGHT

       Copyright (c) 2014-15 ARM Limited

AUTHOR

       This  manual page is based on the yotta command reference.  It was created by Nick Morrott
       <knowledgejunkie@gmail.com> for the Debian GNU/Linux system, but may be used by others

SEE ALSO

       mbed_test_wrapper(1), mbedhtrun(1), mbedls(1), valinor(1), progen(1), progendef(1)