Thanks, that's good to know, although a day or two get one pkg updated
is still not acceptable for JDS.  A new set of development tarballs is
released every two weeks.  During the 2.14 development cycle the number
of changed tarballs was usually between 10 and 20 each time, but
sometimes a lot more.

I realise that the requirements for SFW/CCD are different and updates
happen much much less frequently.

Laca

[1] some additional statistics:

    Changed component versions from:
        2.10 to 2.12:           117
        2.12 to 2.14:           123

        2.10 to 2.14:           143

    In comparison, the total number of components in these builds:
        2.10:   143
        2.12:   162
        2.14:   169

On Wed, 2006-06-21 at 07:46 +0100, Paul Cunningham wrote:
> FYI, in the Companion CD (CCD) gate there is (was) a utility call PUFA 
> that allows you to update most files in the gate for a package update, 
> or new package add, automatically. The auto generated files then just 
> need a bit a of manually tweaking afterwards. I and others in the old 
> CCD team in Watford used to find that using PUFA speeded up the process 
> for the CCD considerably. There used to be a load of example scripts for 
> using PUFA in the gate's bin dir in a sub-directory (I forget what I 
> called it). The utility's source code is in the gates tool/javaTools 
> dir, there is also documentation for it in there. On average it took a 
> day or two to update a package and get the ws building cleanly again, it 
> was all the other crap that goes with that took the time.
> 
> When working on the SFW gate stuff, I used to use PUFA also to generated 
> most of the files and then move them across the the SFW gate, eg. that's 
> how I did all the packages used by solaris printing in that gate. I 
> never did get around to changing PUFA so it worked in the SFW gate 
> directly though (not enough time in the working date).
> 
> But in the old CCD team it was a personal preference if the developer 
> used it or not, some of the team preferred to do it all manually :-( But 
> my preference was to use PUFA (biased as I wrote it, so all problems 
> with it can be blamed on me), it made life so much easier and got rid of 
> most of the boring bits.
> 
> Paul
> 
> Laszlo (Laca) Peter wrote:
> > Recently, I spent a month working on updating libxml2 and libxslt in SFW
> > to newer versions.  The time I actually spent with this was about 2 or 3
> > weeks, another 2 weeks were spent getting the new packages tested.
> > 
> > I'd like to share my experiences, as I may be one of the first "external"
> > contributors to SFW.  I also promised I would do so.  I'm hoping to
> > start a constructive discussion that will lead to improving the SFW/CCD
> > build environment and making it easier for other people to contribute.
> > 
> > First of all, I have to say that I've been building 100s of Open Source
> > packages[1] for Sun for the past 5.5 years, yet this was a new experience
> > for me on several fronts:
> >  - I never worked with SCCS/Codemgr/wx before
> >  - I was (still am) unfamiliar with most tools and processes used by ON
> >    and SFW
> >  - I never used the ON/SFW build system before
> > 
> > That said, if I was starting this work again today, I could only save
> > about 1 week.  The reason being that this update required changing 30
> > files and creating 32, lots and lots of manual updating of files
> > containing lists of files...
> > 
> > To be fair, it wasn't just a simple update, at the same time I split the
> > packages into runtime and development bits and added the python bindings,
> > also in new packages[2].  Still, changing 30 pre-existing files would be
> > pain enough.  To achieve the above, a total of 9869 lines changed
> > (5235 inserted/1338 deleted/3296 modified/32457 unchanged).
> > So, for those not familiar with SFW/CCD, what are these files and why
> > did they change so much:
> > 
> > DISTFILES.sfw, EXFILES.sfw, DISTDIRS.sfw: these files are basically the
> > contents of the source tarball.  They are used for building the SFW
> > source packages (SUNWfooS).  I re-generated them using find commands in
> > the untarred sources.  It seems like this could be completely automated.
> > 
> > README.sfw, mapfiles: these obviously needed to be updated, no problem
> > with that.
> > 
> > Makefile.sfw unpacks the tarball, applies the patches, runs configure
> > and then usually makes one target, not the entire build.  In this case,
> > I needed to add one more make command for building the python bindings.
> > 
> > install-libxml2, install-libxml2-64: now these are really weird things,
> > in my opinion.  Instead of running "make install DESTDIR=foo", SFW uses
> > custom scripts that copy the files from the source tree to the
> > "proto area"[3], listing each file, setting the permissions, copying
> > libs from libtool's .libs (temporary) directory.  Not very nice, to say
> > the least.
> > 
> > When I was updating this script, I needed to do 4 things in parallel:
> >  - check the list of files that make install would install
> >    (I actually used a pkgbuild-generated pkgmap for this)
> >  - find the location of these files in the source tree
> >  - update the install-foo script
> >  - update the package prototype files to make sure they correspond.
> > Guess what, I made mistakes: 2 new headers were missing from the
> > prototype, 2 files appeared in multiple pkgmaps and one file had
> > inconsistent attributes with the proto area[3].
> > 
> > Which leads us to the packaging bits: prototype_com, prototype_sparc,
> > prototype_i386: these could really be generated.  It's really easy to
> > make mistakes when writing these manually.  Most if not all of these are
> > caught by the nightly build scripts, but then it's really just an
> > exercise to see if a human can be as thorough as a shell script (;
> > 
> > FWIW, I do believe that this system works great for ON and other
> > in-house developed projects where developers can update the Makefiles
> > and the pkgmaps when they introduce a new header or library or source
> > file.  However, for Open Source packages we have to do this for the
> > community developers: lots of possible mistakes and in fairness, they
> > know it better than us, so it's better to use their Makefiles.
> > 
> > In my day job, I work on JDS and I maintain the JDS build system,
> > so allow me to make a comparison.  (I'm obviously biased, but I'll
> > try my best to be fair.)  Our builds are also based on community
> > tarballs and source patches.  In JDS, we use the Makefile system
> > supplied by the originating community, which usually means
> > configure; make; make install.  The "make install" part
> > is redirected (using the DESTDIR Makefile variable) to a per-package
> > proto area[3].  This means that by default, any files that the community
> > maintainers intended to install are installed, and to the correct
> > (relative) locations.  Then we remove any files that we decided not to
> > deliver, for example lib*.a, lib*.la.  This is the opposite of SFW's
> > philosophy, where we decide which files we wish to deliver and deal with
> > them one by one.  We are now ready to create packages.  Pkgmaps are
> > created dynamically from glob lists.
> > The above steps are basically the same for all packages and all versions,
> > so updating to a newer version is often as simple as changing the
> > version number in the spec file[4].  Once the packages are built, it's
> > the same in both systems: we need to test the new packages.
> > 
> > I realise we have long-standing traditions at Sun for doing things
> > a certain way and it's difficult to change.  I'm just offering my
> > experiences and recommend that the SFW and CCD builds be made more
> > automatic and more convenient.  In it's present form, SFW/CCD isn't
> > encouraging or inviting contributions, because of the tedious work
> > involved.[5]
> > 
> > Comments, flames welcome.
> > 
> > Laca
> > 
> > 
> > [1] http://opensolaris.org/os/community/desktop/communities/jds/building
> > [2] in case you wonder, they need to be in separate pkgs so that SUNWlxml
> >     need not depend on SUNWPython
> > [3] a directory structure where the result of the build is staged for
> >     packaging in the same structure as they will appear in the packages
> > [4] a spec file is a recipe for doing all that I described here, see
> >     http://cvs.opensolaris.org/source/xref/jds/Solaris/SUNWlibpopt.spec
> >     for an example
> > [5] When I was halfway or even 2/3 done with my changes both libxml2
> >     and libxslt had new micro releases, with lots of nice bug fixes.
> >     Even though I'm all for using the latest and greatest community code,
> >     I decided not to waste a week and start again with the new releases.
> > 
> > 
> > _______________________________________________
> > companion-discuss mailing list
> > companion-discuss at opensolaris.org
> > http://opensolaris.org/mailman/listinfo/companion-discuss
> > 
> _______________________________________________
> sfwnv-discuss mailing list
> sfwnv-discuss at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/sfwnv-discuss


Reply via email to