Boost.Build Python port overall status ¶
Status at a glance ¶
The majority of core modules are done. The low-level interfaces with bjam are also finalized. The 'hello, world' project builds with gcc. A simple performance test shows promising 7x speedup.
Steps ¶
The port will proceed like this:
- Initial port of core modules and the gcc toolset.
- Getting all unit tests and system tests to pass, with the gcc toolset.
- Cleanup the few terrible design issues (really few!)
- Port all other tools.
- Port all docs
- Release.
Status of porting code modules ¶
The below table documents the state of files in the 'build' directory. There, 'done' means the file is totally done, 'almost' means the file is essentially done, but maybe we tweaks are necessary as other files are ported and 'pending' is not yet there.
File | Lines | Status | Notes |
targets.jam | 1550 | almost | |
feature.jam | 1284 | almost | |
virtual-target.jam | 1231 | almost | Need to fix dependency properties |
generators.jam | 1214 | almost | Need to port debug prints |
project.jam | 1018 | almost | |
property.jam | 694 | almost | |
toolset.jam | 510 | almost | action inheritance remain |
property-set.jam | 464 | done | |
type.jam | 370 | done | |
build-request.jam | 301 | pending | |
modifiers.jam | 241 | skipped | |
scanner.jam | 151 | done | |
alias.jam | 75 | done | |
version.jam | 20 | pending |
Status of porting tools ¶
We'll start by porting gcc, and proceed to other compilers only when all tests pass with gcc.
File | Lines | Status | Notes |
python.jam | 1167 | pending | |
msvc.jam | 1003 | pending | |
builtin.jam | 919 | pending | |
gcc.jam | 878 | pending | |
common.jam | 830 | pending | |
qt4.jam | 591 | pending | |
testing.jam | 518 | pending | |
mpi.jam | 501 | pending | |
stage.jam | 493 | pending | |
doxygen.jam | 459 | pending | |
boostbook.jam | 456 | pending | |
quickbook.jam | 314 | pending | |
stlport.jam | 296 | pending | |
cw.jam | 245 | pending | |
gettext.jam | 234 | pending | |
qcc.jam | 228 | pending | |
borland.jam | 224 | pending | |
unix.jam | 223 | pending | |
qt3.jam | 212 | pending | |
hp_cxx.jam | 168 | pending | |
intel-win.jam | 161 | pending | |
rc.jam | 155 | pending | |
pathscale.jam | 149 | pending | |
mipspro.jam | 145 | pending | |
midl.jam | 142 | pending | |
pgi.jam | 139 | pending | |
symlink.jam | 138 | pending | |
sun.jam | 137 | pending | |
dmc.jam | 134 | pending | |
vacpp.jam | 130 | pending | |
whale.jam | 116 | pending | |
xsltproc.jam | 112 | pending | |
como-win.jam | 112 | pending | |
generate.jam | 108 | pending | |
acc.jam | 107 | pending | |
fop.jam | 102 | pending | |
intel-linux.jam | 101 | pending | |
como-linux.jam | 101 | pending | |
package.jam | 98 | pending | |
pch.jam | 97 | pending | |
darwin.jam | 96 | pending | |
cast.jam | 89 | pending | |
docutils.jam | 81 | pending | |
make.jam | 73 | pending | |
notfile.jam | 71 | pending | |
fortran.jam | 55 | pending | |
boostbook-config.jam | 53 | pending | |
quickbook-config.jam | 44 | pending | |
mc.jam | 44 | pending | |
ifort.jam | 44 | pending | |
xlf.jam | 39 | pending | |
gfortran.jam | 39 | pending | |
xsltproc-config.jam | 37 | pending | |
hpfortran.jam | 35 | pending | |
cw-config.jam | 34 | pending | |
lex.jam | 33 | pending | |
bison.jam | 32 | pending | |
intel.jam | 30 | pending | |
como.jam | 30 | pending | |
python-config.jam | 27 | pending | |
qt.jam | 17 | pending | |
msvc-config.jam | 12 | pending | |
doxygen-config.jam | 11 | pending |
Design cleanups ¶
After all tests are passing with gcc, the following cleanups are desired:
- Convert all modules still using global variables to using 'context' object.
- Introduce Property class, and no longer store properties as specially formatted strings
- Introduce Feature class, and don't use icky dict.
- Cleanup error reporting -- review all raise statements. Make sure they don't include 'error' in messages. Convert them to use errors() as appropriate. Implement --stacktrace option for error reporting.
Post port: design cleanup ¶
- Use 'Metatarget' prefix for classes in the 'target' module
- Kill ProjectAttributes and keep all information about project inside ProjectTarget