# qiBuild documentation

# v2.0

## Command line

- `qibuild make`: add `--coverity` option to build with `cov-analisys`.

- `qibuild clean`: syntax closer to other commands, cleans deep by default and

    respects `--config` `--single` and [project] options

- Nicer output for all commands.

- `qibuild configure`: add a `--summarize-options` argument to

    print a summary of the build options at the end of the configuration

- `qibuild configure`: add `--trace-cmake` to trace CMake function calls

- `qibuild make` get rid of confusing and useless “–target” option

- Added a lot of short options (“-n” for “–dry-run”, “-f” for “–force”)

- `qibuild init`: add a `--config` argument to set the default config used by the worktree

- `qibuild`: improve argument parsing.

  - Do not configure everything when running `qibuild configure` from an unknown subdirectory
  - Automatically add projects to the worktree when running `qibuild configure` for a project not yet added to the worktree
  - qibuild commands now accepts both project names and project paths

- `qibuild`: change dependency resolution

  - Now take both build dependencies and runtime dependencies into account by default. Use `--build-deps` to get only the build dependencies.

- `qidoc` by-pass sphinx-build bug on mac

- `qidoc` make it work on archlinux (using sphinx-build2 by default)

- Added `qidoc open` to view generated documentation in a web browser

- Added `qidoc list` list the known documentation projects in a worktree

- `qitoolchain list` better error message when there is no toolchain

- `qidoc build` improve argument parsing, smarter when no argument is given, can build a doc project by passing its name

- Added `qisrc remove`

- Added `qisrc list` list the projects paths of a worktree

- Added `qisrc grep` to grep on every project of a worktree

- Added `qicd` (inspired by `roscd`)

- `qisrc init` can now be used with a git url (git@foo:manifest.git) (ala repo)

- `qisrc init` : add `-p, --profile` option to choose from several profiles (different xml files in the git url)

- `qisrc init` : add `-b, --branch` option to choose a branch in the manifest url

- `qisrc status` : now also display a message when the current branch is ahead or behind the remote branch

- Added `qisrc sync`

  - configure local and remote branches
  - automatically setup code review
  - automatically synchronize git submodules

- Added `qisrc push` : upload changes to code review

- Added `qibuild deploy`, to deploy code to a remote device

- `qibuild test`: learned `--slow`

- `qibuild test`: learned `-n, --dry-run` to just list the test names

- `qibuild test`: learned `--perf` to run performance tests

- `qibuild test`: `--test-name` has been removed, use `-k PATTERN`

- Removed `qisrc fetch`, use `qisrc init` instead

- Removed `qisrc pull`, use `qisrc sync` instead

- Added `qitoolchain convert-package`, to turn a binary package into a qiBuild package

- Added `qitoolchain convert-package`, to turn a binary package or package directory into a qiBuild package

- `qitoolchain import-package` learned `--batch`

- `qitoolchain import-package` learned to import package directory

- `qibuild make` learned `--verbose-make`

- `qisrc` learned `reset`

- `qisrc` learned `snapshot`

## CMake

- Added `qi_generate_src`, `qi_generate_header`

- Added `qi_swig_wrap_java`

- Added `qi_install_python`

- Added `qi_stage_dir`, to find files from source directories

- Added `qi_create_perf_test`

- `qi_create_gtest` and `qi_create_test` learned the `SLOW` keyword so that tests are not run by default.

- `qi_use_lib` learned the `ASSUME_SYSTEM_INCLUDE` flag to use `-isystem` on the dependencies

- `qi_create_config_h` learned to use `configure_file` flags such as `@ONLY`

- `qi_install_conf` learned to install configuration files in a SYSCONDIR outside the CMAKE_INSTALL_PREFIX subtree.

      $ qibuild configure foo
      $ qibuild install foo --prefix=/usr /tmp/without_sysconfdir
      $ tree /tmp/without_sysconfdir
      /tmp/without_sysconfdir/
          usr/
              etc/
                  foo.conf
              lib/
                  libfoo.so

      $ qibuild configure foo -D SYSCONFDIR=/etc
      $ qibuild install foo --prefix=/usr /tmp/with_sysconfdir
      $ tree /tmp/with_sysconfdir
      /tmp/with_sysconfdir/
          etc/
              foo.conf
          usr/
              lib/
                  libfoo.so

- `qi_swig_wrap_python` learned to install python modules in the standard location

- qibuild cmake modules:

  - Added `hdf5`, `openssl`, `libevent_openssl`, `qt_qtdbus`, `qt_qttest`, `boost_unit_test_framework`, `boost_test_exec_monitor`, `boost_timer`, `boost_chrono`, `rrd`, `rrd_th`, `jsoncpp`, `zbar`
  - Renamed dbus into dbus-1, and dbus-glib into dbus-glib-1
  - `qi_use_lib(OPENGL)` now uses upstream’s `FindOpenGL.cmake`
  - ogre-tools: Allow to use more than one plugin.

- `qi_add_test` can now handle test script as target instead of binary.

## Python

- Added `qisrc.sync` for synchronizing a worktree with a manifest

- Added `qisrc.review` for configuring a project to use gerrit

- Added `qibuild.deploy` to handle deploying code to a remote target

- Added `qibuild.gdb` to allow stripping debug symbols out of the libraries

- Added `qibuild.ui` for tools to interact with the user

- Added `qixml` to help XML parsing, get rid of `lxml` dependency

- Added `qisrc.git.get_repo_root`

- Added `qisrc.git.is_submodule`

- Renamed qisrc.worktree.worktree_open to `qisrc.worktree.open_worktree`

- Renamed `qibuild.worktree` to `qisrc.worktree`

- `qibuild.config.QiBuildConfig.read`: learned `create_if_missing` option

- `install-qibuild.sh` now installs `qibuild` scripts in `~/.local/bin`

- `qisrc.git.Git.call` fix using `quiet=True` with `raises=False`

- `qisrc.git.Git.get_current_branch` : return None when in ‘detached HEAD’ state

- `qibuild.command.call` learned `quiet` option

- Usage of `qibuild.log` and `logging.py` has been deprecated, use `qibuild.ui` instead

- `toc.test_project` has been removed, use `qibuild.ctest` instead

- `toc.resolve_deps` has been removed, use `qibuild.cmdparse.deps_from_args` instead

- `qisrc.git.get_current_branch` : return None when in ‘detached HEAD’ state

- Add `qixml` to help XML parsing, get rid of `lxml` dependency

- `qibuild.command.call` add `quiet` option

- Remove usage of `qibuild.log` and `logging.py` to display nice colorized messages to the console, use `qibuild.ui` module.

- Refactoring of the whole module `qibuild.archive`:

  - Non-compatible APIs
  - Removed APIs:
    - `qibuild.archive.extracted_name`
    - `qibuild.archive.archive_name`
    - `qibuild.archive.extract_tar`: use `qibuild.archive.extract` instead
    - `qibuild.archive.extract_zip`: use `qibuild.archive.extract` instead
    - `qibuild.archive.zip`: use `qibuild.archive.compress` instead
    - `qibuild.archive.zip_unix`: use `qibuild.archive.compress` instead
    - `qibuild.archive.zip_win`: use `qibuild.archive.compress` instead
  - New APIs:
    - `qibuild.archive.compress`: include `algo` option, which is set to `zip` when unspecified
    - `qibuild.archive.guess_algo`: guessing the compression method from the archive extension
  - Updated APIs:
    - `qibuild.archive.extract`:
      - support for the `topdir` option has been removed
      - add `algo` option, when unspecified `algo` is set to `zip` on all platform

- Added `qibuild.cmake.modules` to handle CMake module generation

- Renamed `qibuild.cmdparse` to `qibuild.script`

- `qibuild.cmdparse` now centralize the parsing of qibuild actions arguments

    (guessing project from working directory and so on)

## Misc

- Now using tox to run the tests on Jenkins, get rid of `run_tests.py`
- Now using py.test to write the automatic tests

Changelog CMake index Python index Index