seeking advice - make check for python bindings not useful
Mark Jenkins
mark at parit.ca
Fri Sep 4 14:52:08 EDT 2009
This might come as a surprise, but I've never actually looked at the
python bindings test suite, (src/optional/python-bindings/tests); my
colleague worked on it.
From what I'm looking at, it isn't useful and make check with
--enable-python-bindings should actually fail under many circumstances.
(My understanding is that there isn't currently a problem with make
check/distcheck when --enable-python-bindings isn't present; my thanks
go out to the folks who fixed that in April)
The gnucash libraries have to be findable when the gnucash_core_c.so
module is loaded. I use gnucash-evn to achieve this when running my
python programs that use the bindings.
The test suite does likewise, it invokes
$(top_builddir)/src/bin/gnucash-env via TESTS_ENVIRONMENT for the test.
This is wrong, unless make install has been called first (not required
for make check), executing (top_builddir)/src/bin/gnucash-env is
useless, it results in:
"""exec: 8: gnucash-env: not found"""
because that gnucash-env script is designed to execute the second stage
gnucash-env that is found in the installation, or anywhere else in PATH,
but not in the source/build directories.
So the current use of gnucash-env in python-bindings/tests/Makefile.am
is wrong.
Python also needs to be able to find the gnucash python modules when
they are imported. Python will look for modules in pre-defined
directories, and ones listed in PYTHONPATH.
The test suite sets PYTHONPATH via TESTS_ENVIRONMENT as well, and it
sets it to $(pythondir). This is again wrong, $(pythondir) is the place
where the modules go after installation. This means that make check can
only succeed if make install occurs first, or the gnucash modules have
already been installed somewhere else in the default PYTHONPATH, which
is again wrong.
The situation is complicated further by the fact that the .py and .so
files that are eventually installed together into $(pythondir)/$PACKAGE
($PACKAGE is gnucash) are still in separate places after make, the
python files are in src/optional/python-bindings, and the .so files end
up wherever the autotools put them, in my case
src/optiona/python-bindings/.libs/ .
So, I'd like advise from the list on how to proceed.
Here are some options:
1) make installcheck
Instead of performing the tests during make check, perform them during
make installcheck which will allow for the tests to be performed after
installation and to use the installed gnucash-env and install gnucash
module directory
See
http://sources.redhat.com/automake/automake.html#Install-Tests
I'm not sure which version of automake this requires and what version
GnuCash is requiring.
2) simpler tests
Figure out a way to construct an environment for the tests like
gnucash-env provides, only with the location of the libraries within the
source directory. Also, set PYTHONPATH to include both the location of
the .py and .so files.
With an environment like that, you could re-write the tests to not do:
python> from gnucash import Session
and to instead:
python> from gnucash_core import Session
3) same tests, better environment
Do the same with gnucash library search stuff as from 2) . Contract a
$PACKAGE (gnucash) directory that contains/link both the .py and .so
files. Set PYTHONPATH to include this directory.
With that option you could leave the tests alone -- they would still
"from gnucash import Session", which makes the test files more useful,
they can also double as documentation on how to use the bindings
post-install.
4) Give up
Remove the tests entirely and just ship python-bindings/example_scripts
for people to try out after installation.
So, your thoughts? 1, 2, 3, 4, or something I haven't thought of?
Mark Jenkins
Member
ParIT Worker Co-operative
cc Scott
cc fellow ParITistas
More information about the gnucash-devel
mailing list