changes to cctbx we have in ccp4
Hi All, we have a bunch of changes to cctbx in ccp4. If any of them are of general interest I can push them to svn. They'd need some cleanup before applying, so I'm not attaching any patches for now. - option to use external Boost. It's the same what debian and gentoo distros are doing when packaging cctbx. We change a few lines in the scons scripts and rm cctbx_project/boost/* (but the boost directory itself must be present). We could add an option for it (--use-system-boost ?). - removing -funroll-loops - this option must be a historical leftover. Generally it's better to let compiler decide because unrolling loops may make the program slower as well as faster. I tested it on Phaser a couple years ago. The only noticeable effect of this flag was much bigger binary. - extend --use-environment-flags to handle also CC and CXX. With most of makefiles / build scripts, if the user has multiple compilers installed he selects one with CC=gcc-mp-5 etc. Then if the build script really needs to differentiate between compilers it tries to determine what kind of compiler it is. In cctbx it's the other way around - the --compiler flag tells what kind of compiler it is and the build script guesses executable names. For ccp4 I added in two places in libtbx/SConscript: + if libtbx.env.build_options.use_environment_flags: + if 'CC' in os.environ: cc = os.environ['CC'] + if 'CXX' in os.environ: cxx = os.environ['CXX'] so for _some_ platform/compiler combinations it's possible to use compilers with non-default names. Useful for systems with multiple GCC versions. - probe and reduce are called in mmtbx through phenix wrappers (phenix.probe and phenix.reduce). We prefer to call them directly, but I guess it's not to be changed in cctbx. But after changing the name I also had to remove error checking in mmtbx/validation/clashscore.py that checks return code from phenix.reduce. Reduce itself quite often returns non-zero, it's just that the phenix.reduce wrapper ignores it and always returns 0 (probably not intentionally). - cctbx_project/spotfinder/SConscript - on Windows we have to link dxtbxspotfinder with spotfinder. That's the only such problem when compiling cctbx. OTOH it apparently works for everyone else. I don't know why. It must have something to do with us using MinGW. - A couple of #ifdefs for compiling with MinGW (annlib and gltbx) Marcin
Hi Marcin,
- probe and reduce are called in mmtbx through phenix wrappers (phenix.probe and phenix.reduce). We prefer to call them directly, but I guess it's not to be changed in cctbx. But after changing the name I also had to remove error checking in mmtbx/validation/clashscore.py that checks return code from phenix.reduce. Reduce itself quite often returns non-zero, it's just that the phenix.reduce wrapper ignores it and always returns 0 (probably not intentionally).
what you mean by "call them directly"? Yes, there are multiple instances of calling these programs in mmtbx like this trim = "phenix.reduce -quiet -trim -" result = easy_run.fully_buffered(trim) which is super-ugly! Ideally those C (or C++?) programs should be wrapped using boost.python and thus made available in Python. Pavel
Hi Pavel,
- probe and reduce are called in mmtbx through phenix wrappers (phenix.probe and phenix.reduce). We prefer to call them directly, but I guess it's not to be changed in cctbx. But after changing the name I also had to remove error checking in mmtbx/validation/clashscore.py that checks return code from phenix.reduce. Reduce itself quite often returns non-zero, it's just that the phenix.reduce wrapper ignores it and always returns 0 (probably not intentionally).
what you mean by "call them directly"?
Yes, there are multiple instances of calling these programs in mmtbx like this
trim = "phenix.reduce -quiet -trim -" result = easy_run.fully_buffered(trim)
phenix.reduce runs command_line/reduce.py, which in turn runs reduce binary. I just changed "phenix.reduce" to "reduce" to run the binary directly. But reduce.py doesn't pass the return code from the reduce program, and the latter may return 1 even if it worked. Marcin
participants (2)
-
Marcin Wojdyr
-
Pavel Afonine