Ooo-build
This collection of patches, artwork and build infrastructure exists solely as a reflection of the many problems encouraging reasonably responsive change up-stream. The process of change is painful for any organisation, the larger the more painful. However - the size of the problem is no excuse to not try; hence the evenutal aim is to remove the need for ooo-build by incrementally fixing the various problems.
Contents
About ooo-build
ooo-build arose from acute frustration with the bad-old days of OOo process before the Child Workspace concept was introduced, it was also fueled by a non-performant CVS server.
- ooo-build/bin - A description of the tools in bin/
Checking out
To check out trunk ooo-build from the fd.o git repository, run one of the following in the command line:
# anonymous access git clone git://anongit.freedesktop.org/git/ooo-build/ooo-build # if you have a freedesktop.org account git clone ssh://[username@]git.freedesktop.org/git/ooo-build/ooo-build
If you need to work on a branch:
git checkout -b ooo-build-3-0-1 origin/ooo-build-3-0-1
(see fd.o wiki for authoritative info)
Making a patch on a set of files
You can use git locally and it's really great for larger tasks.
make patch.apply cd build/current git init ../../bin/create-gitignores.sh git add sc git commit -m "initial"
And from now on you can locally commit to sc (git commit -a) until you are happy. To generate the patch, just
git diff --no-prefix
You can see the diff from your initial commit with this command
git diff --no-prefix HEAD^
To remove the git tracking :
rm -rf .git
You can also think of more fancy use of git, like having a master branch for applying the patches, and other branches to track history of development you are doing, or use it to actually edit existing patches, to merge patches, etc. In that case, it is useful to track history of the entire tree; to do that, use
git add .
instead of the 'git add sc' in the example above.
Some people prefer stacked git (stg) over plain git when juggling with patches, after the initial "git init; git add .; git commit -a" do a "stg init" - and read the nice manual page.
Adding Patch
One of the main ooo-build features is the ability to apply patches against the upstream sources. A patch can be added the following way:
- propose a patch file name:
- the file suffix .diff is required
- the file name <theme>-short-fix-description.diff is suggested when there are more thematic patches, e.g. warnigns, unittesting, speed that are not put in any thematic directory
- the file name <module>-short-fix-description.diff is suggested when the patch modifies only one source module, e'g' vcl, svx, sd
- the file name cws-<name> should be used for CWS backports
- the file name short-fix-description.diff is enough otherwise
- create the patch in the format to be applied in the top source directory with -P0, see the sample content:
- --- jvmfwk/plugins/sunmajor/pluginlib/gnujre.cxx.old 2007-08-10 17:32:26.0000
- +++ jvmfwk/plugins/sunmajor/pluginlib/gnujre.cxx 2007-08-16 22:40:42.0000
- @@ -78,6 +78,7 @@ char const* const* GnuInfo::getJavaExePa
- ...
- put the patch below ooo-build/patches/<group>; most patches are located in the MWS specific directory. Some bigger groups of patches have their own thematic directory. For example:
- patches/src680/sc-save-split-view.diff
- patches/src680/warning-return-values-filter.diff
- patches/scsolver/scsolver-source-inc-basedlg-hxx.diff
- patches/scsolver/scsolver-source-inc-baselistener-hxx.diff
- mention the patch in the apply file:
- ooo-build allows to sort the patches into groups and apply them conditionaly by distributions. Therefore, each patch has to be mentioned in the right section in the apply file. This file is usually located in the MWS-specific directory, e.g. patches/src680/apply.
- the patch entry might look like:
-
- [ CalcFixes ]
- # Support Hungarian localized keywords for CELL and INFO functions.
- sc-celltrans-hungarian-keywords.diff, i#80299, kohei
- # Fix saving split-view information on 64-bit platforms.
- sc-save-split-view.diff, n#235131, i#81936, jonp
-
- please do not forget to mention the issue numbers and the responsible developer name
- note that the patches are applied in the order in which they are listed in the apply file. If there are some conflicts between the patches, it might be necessary to split a section, for example:
- [ Fixes ]
- # make unzip command not ask when overwriting files
- unzip-command.diff, i#81087, fridrich
- [ CalcFixes ]
- #fix import filter for userforms with calc specific data ( rowsource )
- svx-filter-userform-rowsource.diff, i#73753
- [ Fixes ]
- # edit fields text displaying
- svx-sdrobjeditview-update-edit-area.diff, n#305205, rodo
Committing a Change
Please see the freedesktop.org pages for the authoritative info.
In git, the commits happen locally. To make them available on the server, you have to either push them (if you have the freedesktop.org account), or mail them (if not).
# it is our first session, we have to clone the repository git clone ssh://[username@]git.freedesktop.org/git/ooo-build/ooo-build # develop something, now commit it git commit -a # continue developing, and commit it git commit -a # it is finished, patches apply, everything builds, let's check that we did not # forget uncommitted changes git status # looks fine, let's double check the diff git log -p # everything is perfect, let's push to the remote repository git push # oh, it failed! - somebody committed some changes in the meantime, let's update git pull -r # double check git log -p # everything is fine git push
The form of the commit message should be like the following:
First line roughly describing the change. Leave one empty line, and then follow with more detailed description what and why you changed. This is really important, because some of the git tools (like gitk, git log --pretty=oneline, git rebase --interactive, etc.) show just the first line. Also we don't have a ChangeLog any more, so git log is now your source of the information about the changes. Please do not forget to mention the bugzilla numbers, like i#12345 or bnc#234567. * file1: Did this and that. * file2: And something else here.
Releasing
Note: this section is obsolete because of the recent move to git, see fd.o wiki for more info.
When there's a particularly good reason for a release, such as a distro needs a stable base or we want to do something potentially disruptive, one of the core ooo-build hackers will follow something like this process:
- svn up - get the latest everything
- Read back through the ChangeLog and update the NEWS file for the release, summarizing and attributing the changes.
- edit configure.in, bump the version in the AC_INIT line, incrementing the minor version eg. AC_INIT(ooo-build, X.Y.Z)
- Add a line to any handy ChangeLogs, so we can easily see where this happened in the flow:
2019-13-33 Ned Squeers <ned@sqeers.com> * Version X.Y.Z
- svn commit - so what's there is what's there. If there was a collision you get to loop to the first stage here, but don't re-increment the number.
- svn -r <id> copy svn+ssh://<user>@svn.gnome.org/svn/ooo-build/<tree>/ svn+ssh://<user>@svn.gnome.org/svn/ooo-build/tags/OOO_BUILD_X_Y_Z - this creates a copy of the current state so we can reproduce the build at any time and easily diff between releases. The id is the revision number printed when the commit command finishes, e.g. 10364. The tree is either trunk or branches/ooo-build-M-N.
- ./autogen.sh - this re-builds configure with the version in place; a distro must be specified eg. ./autogen.sh --with-distro=GoOoLinux
- make dist - this builds the archive containing everything.
- md5sum ooo-build-X.Y.Z.tar.gz > ooo-build-X.Y.Z.tar.gz.md5 - so that users can do at least the basic consistency check
- scp ooo-build-X.Y.Z.tar.gz* ooweb@seagull.dreamhost.com:~/download.go-oo.org/<MWS_DIR>/ - uploads the tarball and the .md5 file for the right Master Work Space, eg. SRC680
- It's then customary to announce the release, see the template in doc/announce.txt - update all the ***s to the right versions, insert the contents of NEWS, fire and forget.
Branching
Please see the freedesktop.org wiki for the authoritative info.
When there's a particularly good reason for a branch, such as a MWS is moved to the maintenance mode and we want open master for further development, one of the core ooo-build hackers will follow something like this process:
- create the branch and anchor:
- git checkout -b ooo-build-X-Y-Z master - do the branch for OOo-X.Y.Z from master
- git tag -s OOO-BUILD-X-Y-Z-ANCHOR - this tags the current state so we can diff against it and see the branch specific changes
- modify the message printed at the end of configure.in. It might be something like:
- This is ooo-build-2-0-4 - the stable branch for the 2.0.4 release.
If you want to build something cool, unstable, and risky, use master.
- This is ooo-build-2-0-4 - the stable branch for the 2.0.4 release.
- git commit -a - commit the changes, please make sure you mention the branch creation in the commit log
- git push origin ooo-build-X-Y-Z:ooo-build-X-Y-Z - push the branch
- git push --tags - push the tag
- make changes specific for the original tree (master):
- git checkout master - get sources from the original tree
- if it is an important branch, such as for a minor OOo version, add a line to the message printed at the end of configure.in. It might be something like:
- ooo-build-X-Y-Z branch for X.Y.Z
- git commit -a - commit the changes, please make sure you mention the branch creation in the commit log
- git push - push the changes
Sample commit log:
Branched for X.Y.Z. OOO-BUILD-X-Y-Z-ANCHOR - the anchor tag, ooo-build-2-0-4 - the branch.
Support for new MWS
Note: this section is obsolete because of the recent move to git, see fd.o wiki for more info.
When the upstream branches new MWS and we want to support it in ooo-build, one of the core ooo-build hackers will follow something like this process:
- first, it is better to clean ooo-build and remove support for all old and obsolete milestones; FIXME: it will be described somewhere else
- svn up - get the latest everything
- edit download.in, mention the new tarball file name and URL in the array %SRC_URLS, something like:
- 'oox680-m.*' => '@MIRROR@/OOX680',
- edit patches/src680/apply
- fix the OLDEST_SUPPORTED option; note that more MWSs can be supported, it might be something like:
- OLDEST_SUPPORTED=src680-m181,ooe680-m1
- fix the conditions for the various sections; note that you must add condition for the new MWS everywhere where a condition for another MWS already exists; it might look like:
- [ Fixes >= src680-m182 >= ooe680-m2 ]
- fix the OLDEST_SUPPORTED option; note that more MWSs can be supported, it might be something like:
- might want to use the new milestone by default, then update DEFAULT_TAG in configure in, it looks like:
- DEFAULT_TAG=oox680-mY
- describe all changes in ChangeLog; it is usually enough to mention something like:
- 2019-13-33 Ned Squeers <ned@sqeers.com>
- * configure.in, download.in, patches/src680/apply: support for oox680
- * configure.in: Default to oox680-mY
- svn commit
- it's then customary to announce this kind of change
Support for final OOo version
When the upstream releases final version of a MWS, one of the core ooo-build hackers will follow something like this process:
- must check whether the final sources differ from the latest milestone; if the sources are the same, only symlink is made at go-oo.org/packages; new sources are created otherwise; the new tarball name is something like OOO_X_Y_Z
- do all the steps as in case of support for new MWS with the following modifications:
- use the tarball name OOO_X_Y_Z instead of the MWS- and milestone-based name oox680-mY
- if the sources are only symlinks to the lates milestone, hack bin/unpack, so it creates the symlink to the unpacked sources; it might look like:
- if test -d oox680-mY -a ! -d OOO_X_Y_Z ; then
- echo "Linking rcZ to X.Y.Z"
- ln -sf oox680-mY OOO_X_Y_Z
- fi
Remaining unsolved issue summary
A helpful summary of these is provided here in no particular order along with suggestions for improvement. Many of these are mercifully easy to fix, and should be fixed soon.
source handling
ooo-build has a post-configure 'download' mechanism, whereby the relevant source archives will be automatically downloaded to your system having configured it, in response to your various options.
non-responsiveness / lack of leadership
Many ooo-build patches are ready for up-streaming but there is no / little response from up-stream. Worse there is the perception that taking leadership and actually doing something about merging fixes would be firmly opposed. Finally - even when maintainers are active, responsive & friendly - there is no agreed mechanism for blanket approving fixes - or sub-types of trivial fixes, which thus tend to fester in IssueZilla.
At the time of writing ooo-build's patches are available here: http://go-oo.org/ooo-build/patches/src680/apply.
font substitution
Many vendors ship AGFA's propriatory metric-compatible fonts with OO.o - it is thus necessary to run several seds on the VCL.xcu [ further bloating this already gigantic messy beast ]. We also remove some of the more foolish & enthusiastic font-usage of eg. the metrically-extremely-strange bitstream font eg. bin/font-munge.pl
s/(Bitstream Vera Sans;.*)Albany;/Albany;$1/; # add AMT fonts s/Albany;/Albany AMT;Albany;/g; s/albany;/albanyamt;albany;/g;
no 'UI' team
The up-stream UI team have come up with master-pieces of UI design such as the Yes/No dialog on
"Would you like to not continue saving in the original OpenOffice.org 2.0 format or perhaps switch to another format"
that takes 10 seconds to parse each time ( presumably since it's a recent feature - with a specification too ).
The rest of us mere-mortals know that the UI in OO.o is shockingly broken - and hence are eager to fix it without being blocked & frustrated for weeks by those responsible for the current mess.
A number of the changes / patches in apply/ are blocked on 'user experience' feedback.
different defaults
It is self evident to ooo-build users that a slew of dialogs on 1st run is a painful mess; eg. if there are settings to migrate, don't shout about it - do it silently. Furthermore - the registration dialog looks tacky, we disable both. We also alter a number of other defaults. cf. the last point - I'm optimistic that these will ~never get up-stream agreement.
bleeding-edgeness
There is a 'cool factor' to building the very latest things yourself; and helping solve problems with them. It's nice to be able to see your changes have an effect & help others rapidly, eg. a fix being immediately useful to other people. Of course - you can have too much of a good thing here but ...
Philosophical differences
compatibility
Up-stream believe that the most important data set to be compatible with is existing StarOffice / OO.o users. ooo-build users believe that nearly all the world's data is stored in Microsoft Office format - hence we sacrifice legacy support for better interop. This is of course a continuum, up-stream are at the luny extreme of pushing back-compatibility regardless of it's impact on interoperability, even in cases deliberately excluding useful interoperability improvements on that basis. ooo-build appreciates backwards comaptibility, but is in favour of viewing core differences that are non-interoperable as bugs not features.
process complexity
ooo-build users believe in programmer lead development, with strong peer review and user QA. up-stream believe in process based development, with teams, consensus building, specification writing, test-instead-of-detailed-code-review-or-unit-testing, and all these 'Professional' pasttimes. ooo-build users believe the OO.o we have today is broadly a product of these processes. Up-stream users believe the previous sentence is a compliment.
cross-platform
ooo-build enables patch sub-setting, thus we include patches for features (eg. Mono integration) that are most likely not well separated, and will break the Win32 build. Of course, for ooo-build these are not enabled on Win32 thus causing no problem. This is an impediment to getting work up-stream. Hopefully the 'experimental' process may help encourage good behavior here.
Conclusion
If you read all that don't get depressed - these issues can all be fixed - many of them almost painlessly. We hope to shrink this page quickly.