Howdy guys, One of the TODO items I put in the swig-py3 branch README is to provide a more useful error message if the user tries to build the swig-py bindings, but they are disabled/failed to configure. There are several failure modes that would prevent the Python binding from building, however currently if they are not successfully configured and the user types 'make swig-py' this is what they get:
$ make swig-py /usr/bin/swig -I/home/tscurti/working/oss/subversion/swig-py3-4/py2-build/subversion -I/home/tscurti/working/oss/subversion/swig-py3-4/py2-build/../subversion/include -I/home/tscurti/working/oss/subversion/swig-py3-4/py2-build/../subversion/bindings/swig -I/home/tscurti/working/oss/subversion/swig-py3-4/py2-build/../subversion/bindings/swig/include -I/home/tscurti/working/oss/subversion/swig-py3-4/py2-build/../subversion/bindings/swig/proxy -I/home/tscurti/working/oss/subversion/swig-py3-4/py2-build/subversion/bindings/swig/proxy -I/usr/include/apr-1 -I/usr/include/apr-1 none -o subversion/bindings/swig/python/svn_client.c ../subversion/bindings/swig/svn_client.i swig error : Unrecognized option none Use 'swig -help' for available options. make: *** [../build-outputs.mk:286: subversion/bindings/swig/python/svn_client.c] Error 1 Which isn't very helpful. I even kinda knew this, and it was still a confusing message when I first tried doing a test build on the macos BuildBot recently. (Luckily Brane dug through the log quickly and found the issue [1].) So instead with the attached patch you get something like: $ make swig-py SWIG Python bindings not configured, py3c library not found make: *** [Makefile:924: verify-swig-py] Error 1 or for the more generic case $ make swig-py SWIG Python bindings not configured, check config.log for details make: *** [Makefile:924: verify-swig-py] Error 1 I think it is clear these errors are more meaningful, but I'd like thoughts on: 1) Whether I should bother 2) My implementation 3) Whether you think I should add similar functionality to the other (SWIG) bindings Proposed patch attached. Troy -- 1: https://wilderness.apache.org/channels/?f=svn-dev/2018-12-27
Index: Makefile.in =================================================================== --- Makefile.in (revision 1849851) +++ Makefile.in (working copy) @@ -150,6 +150,7 @@ SWIG_PY_COMPILE = @SWIG_PY_COMPILE@ SWIG_PY_LINK = @SWIG_PY_LINK@ SWIG_PY_LIBS = @SWIG_PY_LIBS@ +SWIG_PY_ERRMSG = @SWIG_PY_ERRMSG@ SWIG_PL_INCLUDES = @SWIG_PL_INCLUDES@ SWIG_RB_INCLUDES = @SWIG_RB_INCLUDES@ -I$(SWIG_SRC_DIR)/ruby/libsvn_swig_ruby SWIG_RB_COMPILE = @SWIG_RB_COMPILE@ @@ -419,6 +420,8 @@ extraclean: local-extraclean install: local-install revision-install +swig-py: verify-swig-py + @INCLUDE_OUTPUTS@ local-all: @BUILD_RULES@ @TRANSFORM_LIBTOOL_SCRIPTS@ @@ -917,6 +920,12 @@ $(SWIG_PY_DIR)/libsvn: mkdir $(SWIG_PY_DIR)/libsvn +verify-swig-py: + @if test -n "$(SWIG_PY_ERRMSG)"; then \ + echo "$(SWIG_PY_ERRMSG)"; \ + exit 1; \ + fi + copy-swig-py: autogen-swig-py $(SWIG_PY_DIR)/libsvn @for f in $(SWIG_PY_SRC_DIR)/*.py $(SWIG_PY_DIR)/*.py; do \ ! [ -f "$$f" ] || cp -pf $$f $(SWIG_PY_DIR)/libsvn; \ Index: build/ac-macros/swig.m4 =================================================================== --- build/ac-macros/swig.m4 (revision 1849851) +++ build/ac-macros/swig.m4 (working copy) @@ -103,6 +103,7 @@ SWIG_PY_COMPILE="none" SWIG_PY_LINK="none" SWIG_PY_OPTS="none" + SWIG_PY_ERRMSG="SWIG Python bindings not configured, check config.log for details" if test "$PYTHON" != "none"; then AC_MSG_NOTICE([Configuring python swig binding]) @@ -112,6 +113,7 @@ SWIG_PY_INCLUDES="\$(SWIG_INCLUDES) $ac_cv_python_includes" if test "$ac_cv_python_includes" = "none"; then + SWIG_PY_ERRMSG="SWIG Python bindings not configured, no distutils found" AC_MSG_WARN([python bindings cannot be built without distutils module]) else @@ -125,11 +127,13 @@ CPPFLAGS="$save_cppflags" if test "$python_header_found" = "no"; then + SWIG_PY_ERRMSG="SWIG Python bindings not configured, no Python.h found" AC_MSG_WARN([Python.h not found; disabling python swig bindings]) else SVN_PY3C() if test "$py3c_found" = "no"; then + SWIG_PY_ERRMSG="SWIG Python bindings not configured, py3c library not found" AC_MSG_WARN([py3c library not found; disabling python swig bindings]) else AC_CACHE_CHECK([for compiling Python extensions], [ac_cv_python_compile],[ @@ -193,6 +197,9 @@ ["$svn_cv_pycfmt_apr_int64_t"], [Define to the Python/C API format character suitable] [ for apr_int64_t]) + + dnl SWIG Python bindings successfully configured, clear the error message + SWIG_PY_ERRMSG="" fi fi @@ -341,6 +348,7 @@ AC_SUBST(SWIG_PY_LINK) AC_SUBST(SWIG_PY_LIBS) AC_SUBST(SWIG_PY_OPTS) + AC_SUBST(SWIG_PY_ERRMSG) AC_SUBST(SWIG_PL_INCLUDES) AC_SUBST(SWIG_PL_LINK) AC_SUBST(SWIG_RB_LINK)