[publican-list] BZ 471703 RFE: new "make" target that does not use 98-100% CPU
Jeff Fearn
jfearn at redhat.com
Mon Mar 2 00:10:41 UTC 2009
https://bugzilla.redhat.com/show_bug.cgi?id=471703
There is a lot of overhead in processing make requests due to the number of
templates used in the Makefiles. For each extra language you support in your book
the start up cost is increased. It's currently very annoying on RHEL where there
are 23 languages, on Fedora this could quickly become extremely painful due to the
extra languages supported.
The only real solution to fixing this is to move the logic in the common make
files to programming language. I can't get time allocated at work to do this :( So
it's either a hobby project for me, and that means I'd do it in the sweet joy that
is Perl, or someone else can do it in some other language.
From the writers perspective it would have two main effects.
1: The commands used to manipulate books would change from `make blah` to,
probably, `publican --options`
2: The books Makefile will probably need to be changed to another format.
From a support point it would mean that adding optional behaviour is easier, it's
a pain in the bum to do that in a maintainable way in the current massive make files.
Depending on the format of the config files it may lower the barrier to someone
creating a GUI to handle building on the desk top.
-------
Here is my, rather relaxed, proposal for my hobby project. Other people should
feel free to propose alternative approaches they are prepared to deliver on.
-------
Jeff's hobby time approach to porting publican.
Approach:
Use Perl, because I like it!
Create a Publican module to contain config data.
Create sub modules for each function.
e.g.
Publican::XmlClean
Publican::Builder
Publican::CreateBook
...
Migrate required logic and drop any unused logic.
Migrate all logic where possible to perl. There is currently: sh, sed, awk, perl,
java. Some of the java stuff is unavoidable, but manageable since it is contained
enough to be maintainable.
Steps (the odd steps are not ordered):
Create Publican module using Module::Starter::PBP
Drink cider.
Migrate xmlClean to Publican::XmlClean
Drink cider.
Migrate all the logic from Makefile.common and Makefile.templates to Publican::Builder
Drink cider.
Migrate create_book to Publican::CreateBook
Drink cider.
Create a publican script to act as an interface between the user and the Publican
modules.
Drink cider.
Use Config::Simple to handle config files ... probably in html format, which looks
like:
xml_lang: en-US
docname: The_Art_Of_Pants
other_langs: de-DE en-FR
Drink cider.
Create a method of converting existing books from make to publican.
Drink cider.
Update brand packages to use new config format.
Drink cider.
Use Test::More, Test::Perl::Critic etc to create a decent suite of tests.
Drink cider.
Use Locale::Maketext::Gettext to localise warnings, errors & other output of the
publican process.
Drink cider.
Package and ship.
Join AA.
Let me know what you think.
Cheers, Jeff.
--
Jeff Fearn <jfearn at redhat.com>
Software Engineer
Engineering Operations
Red Hat, Inc
Freedom ... courage ... Commitment ... ACCOUNTABILITY
More information about the publican-list
mailing list