···1+# Qt 5 Maintainer's Notes
2+3+## Minor Updates
4+5+Let `$major` be the major version number, e.g. `5.9`.
6+7+1. Change the version number in the `$major/fetch.sh`.
8+2. Run `./maintainers/scripts/fetch-kde-qt.sh pkgs/development/qt-5/$major`
9+ from the top of the Nixpkgs tree.
10+11+See below if it is necessary to update any patches.
12+13+## Major Updates
14+15+Let `$major` be the new major version number, e.g. `5.10`.
16+17+1. Copy the subdirectory from the previous major version to `$major`.
18+2. Change the version number in `$major/fetch.sh`.
19+3. Run `./maintainers/scripts/fetch-kde-qt.sh pkgs/development/qt-5/$major`
20+ from the top of the Nixpkgs tree.
21+4. Add a top-level attribute in `pkgs/top-level/all-packages.nix` for the new
22+ major version.
23+5. Change the `qt5` top-level attribute to point to the new major version.
24+6. If the previous major version is _not_ a long-term support release,
25+ remove it from Nixpkgs.
26+27+See below if it is necessary to update any patches.
28+29+## Patches
30+31+Nixpkgs maintains several patches for Qt which cannot be submitted upstream. To
32+facilitate maintenance, a fork of the upstream repository is created for each patched module:
33+34+- [qtbase](https://github.com/ttuegel/qtbase)
35+- [qtwebkit](https://github.com/ttuegel/qtwebkit)
36+- [qttools](https://github.com/ttuegel/qttools)
37+- [qtscript](https://github.com/ttuegel/qtscript)
38+- [qtserialport](https://github.com/ttuegel/qtserialport)
39+- [qtdeclarative](https://github.com/ttuegel/qtdeclarative)
40+- [qtwebengine](https://github.com/ttuegel/qtwebengine)
41+42+In each repository, the patches are contained in a branch named `nixpkgs/$major`
43+for each major version. Please make a pull request to add or update any patch
44+which will be maintained in Nixpkgs.
45+46+The forked repository for each module is used to create a single patch in
47+Nixpkgs. To recreate the patch for module `$module` (e.g. `qtbase`) at version
48+`$version` (e.g. `5.9.1`) in the branch `$major` (e.g. `5.9`),
49+50+1. Clone the fork for `$module` from the list above.
51+2. Checkout the active branch, `git checkout nixpkgs/$major`.
52+3. Compare the patched branch to the release tag,
53+ `git diff v$version > $module.patch`.
54+4. Copy `$module.patch` into the Nixpkgs tree.
55+56+### Minor Version Updates
57+58+To update module `$module` to version `$version` from an older version in the
59+same branch `$major`,
60+61+1. Clone the fork for `$module` from the list above.
62+2. Checkout the active branch, `git checkout nixpkgs/$major`.
63+3. Merge the new version into the active branch,
64+ `git merge --no-ff v$version`.
65+4. Fix any conflicts.
66+5. Open a pull request for the changes.
67+6. Follow the instructions above to recreate the module patch in Nixpkgs.
68+69+### Major Version Updates
70+71+To update module `$module` from `$oldversion` in branch `$oldmajor` to version
72+`$version` in branch `$major`,
73+74+1. Clone the fork for `$module` from the list above.
75+2. Checkout a new branch for the new major version,
76+ `git checkout -b nixpkgs/$major nixpkgs/$oldmajor`.
77+3. Rebase the patches from `$oldversion` onto the new branch,
78+ `git rebase v$oldversion --onto v$version`.
79+4. Fix any conflicts.
80+5. Open a pull request for the changes.
81+6. Follow the instructions above to recreate the module patch in Nixpkgs.