# qiBuild documentation

# v3.0

## General

- Tons of bug fixes, massive Python refactoring
- The `./install-qibuild.sh` script is gone: its name was misleading, and it lead to bad stuff, like:
  - installing in `/usr/local` by default on mac (which causes problem on a multi-user machine)
  - being hard to know which qibuild version was used

Instead, you should use `./generate-sourceme.sh` and patch your `~/.profile` to include the generated `sourceme.sh` file if you want to use the latest `git` version of `qibuild`, or just use `pip` once `qibuild` is published on `Pypi`

## Command line

### General

- Some actions that could only run on all projects learned a `-p,--projects` argument. You can now for instance use `qibuild foreach -p hello -- <cmd>` to run `<cmd>` on the `hello` project and its dependencies
- It is now impossible to have nested worktrees.
  - The `--force` option is gone
  - `qibuild init`, `qisrc init`, will only run if the working directory is empty
- `qibuild deploy` no longer strips the debug symbols by default. Use `--split-debug` to do so.

### qisrc

- After `qisrc init`, the projects under code review now end up with only one remote instead of two.
- `qisrc init` learned `--groups` to only clone some repositories of a project
- `qisrc sync` now always clones the missing projects (even when not using `-a`)
- `qisrc sync` now handles repositories renames
- `qisrc sync` logic changed to be a bit more reliable and fail less often
- `qisrc foreach` learned `--all`, to run on every projects (previously it could only run on git projects)
- add `qisrc manifest` to manage the manifest used in a given worktree.
- `qisrc init` can now only be used once. To add a new manifest, run `qisrc manifest --add name url`. This makes it possible to change the groups, too
- `qisrc init --no-review` is gone, this was seldom used anyway
- `qisrc sync` learned `--build-deps` to pull the build dependencies
- Since this option clashes with other qibuild option, you should now use `qibuild configure --no-runtime` or `qibuild configure --build-deps-only` instead of `qibuild configure --build-deps`
- Manifests are now cloned in `.qi/manifests`, making it possible to have code review on manifests repositories too
- Syntax of the `manifests.xml` changed:

    <!-- old -->
    <manifest>
      <remote name="origin" fetch="git@example.com"
              review="http://gerrit:8080" />
      <project name="libfoo.git"
               path="lib/libfoo"
               revision="next"
               review="true" />
    </manifest>

    <!-- new -->
    <manifest>
      <remote name="origin" url="git@example.com" />
      <remote name="gerrit" url="ssh://gerrit:29418/" review="true" />

      <repo src="lib/libfoo" default_branch="next" remote="gerrit" />
    </manifest>

- The gerrit ssh port is now no longer hard-coded, and you should specify the `ssh` URL, not the `http` URL.
- The `next` branch of the repo in `lib/libfoo` will track `ssh://<username>@gerrit:29418/libfoo.git` instead of `git@example.com:libfoo.git`. This makes it possible to use gerrit only, without any mirror, and it also means you don’t have to wait for the gerrit synchronization, which is helpful when using `qisrc` on a buildfarm plugged to gerrit.
- The default manifest is now called `manifest.xml` instead of `default.xml` to ease the transition.
- `qisrc` profiles are gone, use groups instead. Here’s how you can make it possible to only clone 2 of the 3 repositories declared in the manifest:

    <!-- in qibuild2 -->

    <!-- manifest/default.xml -->

      <manifest>
        <project name="foo.git" />
        <manifest url="bar.xml" />
      </manifest>

    <!-- manifest/bar.xml -->
      <manifest>
        <project name="bar.git" />
        <project name="libbar.git" />
      </manifest>

Used with `--profile bar`

    <!--in qibuild3 -->

      <manifest>
        <repo name="foo.git" />
        <repo name="bar.git" />
        <repo name="libbar.git" />

        <groups>
          <group name="bar">
            <project name="bar.git" />
            <project name="libbar.git" />
          </group>
        </groups>
      </manifest>

Used with `--group bar`

### qibuild

- `qibuild` now uses `CMake` code from the worktree. This makes it possible to use a Python command line version `qibuild` different of the `qibuild/cmake` code.
- `qibuild init -c` is deprecated, use `qitoolchain set-default` instead
- `qibuild init --interactive` is deprecated, use `qibuild config --wizard` instead
- `qibuild test` learned `--build-first`
- Add `qibuild run`
- Add `qibuild find`
- Syntax of `qiproject.xml` changed:

    <!-- old -->
    <project name="foo">
      <depends runtime="true" names="bar" />
    </project>

    <!-- new -->
    <project version="3" >
      <qibuild name="foo">
        <depends runtime="true" names="bar" />
      </qibuild>

    </project>

This is more consistent, and helps solving nasty bugs when using nested qibuild projects.

### qitoolchain

- Add `qitoolchain set-default`

### qilinguist

- `qilinguist` can now be called without any project name
- Add `qilinguist list`

### qidoc

- Now usable without a “templates” repository
- Can choose the project to be at the root of the generated doc
- Now only generates files in `<project>/build-doc`
- New commands: `qidoc clean`, `qidoc install`
- Syntax of `qiproject.xml` changed:

    <!-- old -->
    <! -- in foo/qiproject.xml -->
    <project>
      <sphinxdoc src="doc" name="foo-doc" />
    </project>

    <!-- new -->
    <! -- in foo/qiproject.xml -->
    <project version="3" >
      <project src="doc" />
    </project>

    <! -- in foo/doc/qiproject.xml -->
    <project version="3" >
      <qidoc type="sphinx" name="foo-doc" />
    </project>

## CMake

- MacOS: use `rpath` :libraries use an `@rpath` based directory for the default installed name. Executables contain a `rpath` pointing to the root of the install directory.
- Linux shared libraries are linked with a `rpath` set to `$ORIGIN/../lib` by default, as it was done for executables.

Changelog CMake index Python index Index