v3.0¶
General¶
- Tons of bug fixes, massive Python refactoring
- The
./install-qibuild.shscript is gone: its name was misleading, and it lead to bad stuff, like:- installing in
/usr/localby default on mac (which causes problem on a multi-user machine) - being hard to know which qibuild version was used
- installing in
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,--projectsargument. You can now for instance useqibuild foreach -p hello -- <cmd>to run<cmd>on thehelloproject and its dependencies - It is now impossible to have nested worktrees.
- The
--forceoption is gone qibuild init,qisrc init, will only run if the working directory is empty
- The
qibuild deployno longer strips the debug symbols by default. Use--split-debugto do so.
qisrc¶
- After
qisrc init, the projects under code review now end up with only one remote instead of two. qisrc initlearned--groupsto only clone some repositories of a projectqisrc syncnow always clones the missing projects (even when not using-a)qisrc syncnow handles repositories renamesqisrc synclogic changed to be a bit more reliable and fail less oftenqisrc foreachlearned--all, to run on every projects (previously it could only run on git projects)- add
qisrc manifestto manage the manifest used in a given worktree. qisrc initcan now only be used once. To add a new manifest, runqisrc manifest --add name url. This makes it possible to change the groups, tooqisrc init --no-reviewis gone, this was seldom used anywayqisrc synclearned--build-depsto pull the build dependencies- Since this option clashes with other qibuild option, you should now use
qibuild configure --no-runtimeorqibuild configure --build-deps-onlyinstead ofqibuild 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.xmlchanged:
<!-- 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
sshURL, not thehttpURL. - The
nextbranch of the repo inlib/libfoowill trackssh://<username>@gerrit:29418/libfoo.gitinstead ofgit@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 usingqisrcon a buildfarm plugged to gerrit. - The default manifest is now called
manifest.xmlinstead ofdefault.xmlto ease the transition. qisrcprofiles 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¶
qibuildnow usesCMakecode from the worktree. This makes it possible to use a Python command line versionqibuilddifferent of theqibuild/cmakecode.qibuild init -cis deprecated, useqitoolchain set-defaultinsteadqibuild init --interactiveis deprecated, useqibuild config --wizardinsteadqibuild testlearned--build-first- Add
qibuild run - Add
qibuild find - Syntax of
qiproject.xmlchanged:
<!-- 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¶
qilinguistcan 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.xmlchanged:
<!-- 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@rpathbased directory for the default installed name. Executables contain arpathpointing to the root of the install directory. - Linux shared libraries are linked with a
rpathset to$ORIGIN/../libby default, as it was done for executables.