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.