kopia lustrzana https://github.com/Hamlib/Hamlib
Update ax_python_devel.m4 macro
Also reorder its call in configure.ac which now allows the PYTHON_VERSION environment variable to be recognized and processed correctly by the build system. Correctly add PYTHON_LIBS (correct ouput variable of AX_PYTHON_DEVEL) to the Makefile for the Python bindings. Update README.python for use of PYTHON_VERSION.astyle-formatting
rodzic
6e3b79fc69
commit
a2a873bbc9
|
@ -3,7 +3,7 @@
|
|||
# more information on swig at http://www.swig.org
|
||||
#
|
||||
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/bindings @TCL_INCLUDE_SPEC@ @PYTHON_CPPFLAGS@
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/bindings $(PYTHON_CPPFLAGS) @TCL_INCLUDE_SPEC@
|
||||
|
||||
AM_CFLAGS = -fno-strict-aliasing
|
||||
|
||||
|
@ -88,7 +88,7 @@ nodist_pyexec_PYTHON = Hamlib.py
|
|||
nodist__Hamlib_la_SOURCES = hamlibpy_wrap.c
|
||||
|
||||
_Hamlib_la_LDFLAGS = -no-undefined -module -avoid-version
|
||||
_Hamlib_la_LIBADD = $(top_builddir)/src/libhamlib.la
|
||||
_Hamlib_la_LIBADD = $(top_builddir)/src/libhamlib.la $(PYTHON_LIBS)
|
||||
_Hamlib_ladir = $(pyexecdir)
|
||||
_Hamlib_la_LTLIBRARIES = $(pyexec_ltlib)
|
||||
|
||||
|
@ -100,8 +100,8 @@ check-py: all-py
|
|||
Hamlib.py: hamlibpy_wrap.c
|
||||
|
||||
hamlibpy_wrap.c: hamlib.swg $(SWGDEP)
|
||||
$(SWIG) -python @AM_CPPFLAGS@ -I$(top_srcdir)/bindings -o $@ \
|
||||
`test -f hamlib.swg || echo '$(srcdir)/'`hamlib.swg
|
||||
$(SWIG) -python $(AM_CPPFLAGS) -I$(top_srcdir)/bindings \
|
||||
-o $@ `test -f hamlib.swg || echo '$(srcdir)/'`hamlib.swg
|
||||
|
||||
install-py:
|
||||
clean-py:
|
||||
|
|
|
@ -37,6 +37,9 @@ its bindings first:
|
|||
make
|
||||
make install
|
||||
|
||||
NOTE: Over time Python3 will become the default Python interpreter on most
|
||||
distributions and the extra step will be needed for Python2 as detailed below.
|
||||
|
||||
At this point the Hamlib binaries, development files, and Python2 bindings
|
||||
will be installed to their customary locations under $HOME/local.
|
||||
|
||||
|
@ -44,21 +47,20 @@ Examination of the configure script's output will confirm that Python2 is
|
|||
found and used as this extract shows:
|
||||
|
||||
checking whether to build python binding and demo... yes
|
||||
checking for a Python interpreter with version >= 2.1... python
|
||||
checking for python... /usr/bin/python
|
||||
checking for python version... 2.7
|
||||
checking for python platform... linux2
|
||||
checking for python script directory... ${prefix}/lib64/python2.7/site-packages
|
||||
checking for python extension module directory... ${exec_prefix}/lib64/python2.7/site-packages
|
||||
checking for python2.7... (cached) /usr/bin/python
|
||||
checking for a version of Python >= '2.1.0'... yes
|
||||
checking for the distutils Python package... yes
|
||||
checking for Python include path... -I/usr/include/python2.7
|
||||
checking for Python library path... -L/usr/lib64 -lpython2.7
|
||||
checking for Python site-packages path... /usr/lib64/python2.7/site-packages
|
||||
checking python extra libraries... -lpthread -ldl -lutil
|
||||
checking python extra libraries... -lpthread -ldl -lutil -lm
|
||||
checking python extra linking flags... -Xlinker -export-dynamic
|
||||
checking consistency of all components of python development environment... yes
|
||||
checking whether /usr/bin/python version is >= 2.1... yes
|
||||
checking for /usr/bin/python version... 2.7
|
||||
checking for /usr/bin/python platform... linux2
|
||||
checking for /usr/bin/python script directory... ${prefix}/lib64/python2.7/site-packages
|
||||
checking for /usr/bin/python extension module directory... ${exec_prefix}/lib64/python2.7/site-packages
|
||||
|
||||
At this point the file pytest.py in the source bindings directory may be
|
||||
run as a test. If an error is given that the Hamlib module cannot be
|
||||
|
@ -66,37 +68,52 @@ found, see below.
|
|||
|
||||
The next step is to configure and build for Python3:
|
||||
|
||||
../hamlib/configure --with-python-binding PYTHON_VERSION='3.6' --prefix=$HOME/local
|
||||
|
||||
If that doesn't work try:
|
||||
|
||||
../hamlib/configure --with-python-binding PYTHON=`which python3` --prefix=$HOME/local
|
||||
|
||||
then do the build:
|
||||
|
||||
cd bindings
|
||||
make
|
||||
|
||||
Here the PYTHON environment variable is set to the first python3 executable
|
||||
found in the path (python3 may be a symbolic link, which is fine). This
|
||||
may be unwanted behavior if multiple versions of Python are installed.
|
||||
NOTE: By changing the current directory to 'bindings', only the new Python3
|
||||
module will be compiled, which speeds things up considerably.
|
||||
|
||||
Here the PYTHON_VERSION environment variable is set to the Major.minor version
|
||||
of Python we wish to build against. The build system should be able to set
|
||||
everything correctly from this environment variable. If not, try the second
|
||||
example line which sets the PYTHON environment variable to the first python3
|
||||
executable found in the path (python3 may be a symbolic link, which is fine).
|
||||
This may be unwanted behavior if multiple versions of Python are installed so
|
||||
a specific version with the full path may also be provided.
|
||||
|
||||
Python3 was found as shown in this configure output extract:
|
||||
|
||||
checking whether to build python binding and demo... yes
|
||||
checking whether /usr/bin/python3 version is >= 2.1... yes
|
||||
checking for /usr/bin/python3 version... 3.6
|
||||
checking for /usr/bin/python3 platform... linux
|
||||
checking for /usr/bin/python3 script directory... ${prefix}/lib64/python3.6/site-packages
|
||||
checking for /usr/bin/python3 extension module directory... ${exec_prefix}/lib64/python3.6/site-packages
|
||||
checking for python3.6... /usr/bin/python3
|
||||
checking for python3.6... /usr/bin/python3.6
|
||||
checking for a version of Python >= '2.1.0'... yes
|
||||
checking for the distutils Python package... yes
|
||||
checking for Python include path... -I/usr/include/python3.6m
|
||||
checking for Python library path... -L/usr/lib64 -lpython3.6m
|
||||
checking for Python site-packages path... /usr/lib64/python3.6/site-packages
|
||||
checking python extra libraries... -lpthread -ldl -lutil
|
||||
checking python extra libraries... -lpthread -ldl -lutil -lm
|
||||
checking python extra linking flags... -Xlinker -export-dynamic
|
||||
checking consistency of all components of python development environment... yes
|
||||
checking whether /usr/bin/python3.6 version is >= 2.1... yes
|
||||
checking for /usr/bin/python3.6 version... 3.6
|
||||
checking for /usr/bin/python3.6 platform... linux
|
||||
checking for /usr/bin/python3.6 script directory... ${prefix}/lib64/python3.6/site-packages
|
||||
checking for /usr/bin/python3.6 extension module directory... ${exec_prefix}/lib64/python3.6/site-packages
|
||||
|
||||
Since all the Makefiles were regenerated by the second run of configure,
|
||||
hamlib will be compiled again.
|
||||
|
||||
Next install the Python3 bindings:
|
||||
Next install only the Python3 bindings (still in 'bindings' as the current
|
||||
directory):
|
||||
|
||||
cd bindings
|
||||
make install
|
||||
|
||||
In this case, only the generated files in 'bindings' will be installed
|
||||
|
@ -162,6 +179,11 @@ interpreter was started from and various system directories.
|
|||
Far more information than this is available in the relevant Python
|
||||
documentation, but this should get your scripts working.
|
||||
|
||||
Removing (uninstalling) the bindings can be done from the 'bindings'
|
||||
directory. Just be sure that 'configure' is run with the options for either
|
||||
Python2 or Python3 first so that 'bindings/Makefile' will generated for the
|
||||
version to be removed.
|
||||
|
||||
As always, feedback is welcome:
|
||||
|
||||
Hamlib Developers <hamlib-developer@lists.sourceforge.net>
|
||||
|
|
|
@ -55,7 +55,7 @@ def StartUp():
|
|||
print("Model:\t\t\t%s" % my_rig.caps.model_name)
|
||||
print("Manufacturer:\t\t%s" % my_rig.caps.mfg_name)
|
||||
print("Backend version:\t%s" % my_rig.caps.version)
|
||||
print("Backend license:\t%s" % my_rig.caps.copyright)
|
||||
print("Backend status:\t\t%s" % Hamlib.rig_strstatus(my_rig.caps.status))
|
||||
print("Rig info:\t\t%s" % my_rig.get_info())
|
||||
|
||||
my_rig.set_level("VOX", 1)
|
||||
|
@ -75,7 +75,7 @@ def StartUp():
|
|||
print("status:\t\t\t%s - %s" % (my_rig.error_status,
|
||||
Hamlib.rigerror(my_rig.error_status)))
|
||||
|
||||
print("AF level:\t\t%s" % my_rig.get_level_f(Hamlib.RIG_LEVEL_AF))
|
||||
print("AF level:\t\t%0.2f" % my_rig.get_level_f(Hamlib.RIG_LEVEL_AF))
|
||||
print("strength:\t\t%s" % my_rig.get_level_i(Hamlib.RIG_LEVEL_STRENGTH))
|
||||
print("status:\t\t\t%s" % my_rig.error_status)
|
||||
print("status(str):\t\t%s" % Hamlib.rigerror(my_rig.error_status))
|
||||
|
|
|
@ -19,7 +19,7 @@ def StartUp():
|
|||
Hamlib.rig_set_debug(Hamlib.RIG_DEBUG_NONE)
|
||||
|
||||
# Init RIG_MODEL_DUMMY
|
||||
my_rig = Hamlib.Rig (Hamlib.RIG_MODEL_DUMMY)
|
||||
my_rig = Hamlib.Rig(Hamlib.RIG_MODEL_DUMMY)
|
||||
my_rig.set_conf("rig_pathname", "/dev/Rig")
|
||||
my_rig.set_conf("retry", "5")
|
||||
|
||||
|
@ -55,7 +55,7 @@ def StartUp():
|
|||
print "Model:\t\t\t", my_rig.caps.model_name
|
||||
print "Manufacturer:\t\t", my_rig.caps.mfg_name
|
||||
print "Backend version:\t", my_rig.caps.version
|
||||
print "Backend license:\t", my_rig.caps.copyright
|
||||
print "Backend status:\t\t", Hamlib.rig_strstatus(my_rig.caps.status)
|
||||
print "Rig info:\t\t", my_rig.get_info()
|
||||
|
||||
my_rig.set_level("VOX", 1)
|
||||
|
@ -70,7 +70,7 @@ def StartUp():
|
|||
|
||||
print "Setting AF to %0.2f...." % (af)
|
||||
|
||||
my_rig.set_level ("AF", af)
|
||||
my_rig.set_level("AF", af)
|
||||
|
||||
print "status:\t\t\t%s - %s" % (my_rig.error_status,
|
||||
Hamlib.rigerror(my_rig.error_status))
|
||||
|
|
|
@ -508,8 +508,9 @@ AC_MSG_RESULT([$cf_with_python_binding])
|
|||
|
||||
dnl AX_PYTHON_DEVEL from macros/ax_python_devel.m4
|
||||
AS_IF([test x"${cf_with_python_binding}" = "xyes"],[
|
||||
dnl Order matters! AX_PYTHON_DEVEL must be first for PYTHON_VERSION to be honored.
|
||||
AX_PYTHON_DEVEL([">='2.1'"])
|
||||
AM_PATH_PYTHON([2.1],, [:])
|
||||
AX_PYTHON_DEVEL
|
||||
|
||||
BINDING_LIST="${BINDING_LIST} python"
|
||||
BINDING_ALL="${BINDING_ALL} all-py"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
|
@ -12,8 +12,8 @@
|
|||
# in your configure.ac.
|
||||
#
|
||||
# This macro checks for Python and tries to get the include path to
|
||||
# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
|
||||
# output variables. It also exports $(PYTHON_EXTRA_LIBS) and
|
||||
# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output
|
||||
# variables. It also exports $(PYTHON_EXTRA_LIBS) and
|
||||
# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
|
||||
#
|
||||
# You can search for some particular version of Python by passing a
|
||||
|
@ -52,7 +52,7 @@
|
|||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
|
@ -67,7 +67,7 @@
|
|||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 15
|
||||
#serial 21
|
||||
|
||||
AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
|
||||
AC_DEFUN([AX_PYTHON_DEVEL],[
|
||||
|
@ -99,7 +99,7 @@ AC_DEFUN([AX_PYTHON_DEVEL],[
|
|||
This version of the AC@&t@_PYTHON_DEVEL macro
|
||||
doesn't work properly with versions of Python before
|
||||
2.1.0. You may need to re-run configure, setting the
|
||||
variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
|
||||
variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
|
||||
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
|
||||
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
|
||||
to something else than an empty string.
|
||||
|
@ -137,7 +137,7 @@ variable to configure. See ``configure --help'' for reference.
|
|||
#
|
||||
AC_MSG_CHECKING([for the distutils Python package])
|
||||
ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
|
||||
if test -z "$ac_distutils_result"; then
|
||||
if test $? -eq 0; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
|
@ -172,7 +172,7 @@ $ac_distutils_result])
|
|||
# Check for Python library path
|
||||
#
|
||||
AC_MSG_CHECKING([for Python library path])
|
||||
if test -z "$PYTHON_LDFLAGS"; then
|
||||
if test -z "$PYTHON_LIBS"; then
|
||||
# (makes two attempts to ensure we've got a version number
|
||||
# from the interpreter)
|
||||
ac_python_version=`cat<<EOD | $PYTHON -
|
||||
|
@ -227,25 +227,25 @@ EOD`
|
|||
then
|
||||
# use the official shared library
|
||||
ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
|
||||
PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
|
||||
PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
|
||||
else
|
||||
# old way: use libpython from python_configdir
|
||||
ac_python_libdir=`$PYTHON -c \
|
||||
"from distutils.sysconfig import get_python_lib as f; \
|
||||
import os; \
|
||||
print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
|
||||
PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
|
||||
PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
|
||||
fi
|
||||
|
||||
if test -z "PYTHON_LDFLAGS"; then
|
||||
if test -z "PYTHON_LIBS"; then
|
||||
AC_MSG_ERROR([
|
||||
Cannot determine location of your Python DSO. Please check it was installed with
|
||||
dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
|
||||
dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
|
||||
])
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON_LDFLAGS])
|
||||
AC_SUBST([PYTHON_LDFLAGS])
|
||||
AC_MSG_RESULT([$PYTHON_LIBS])
|
||||
AC_SUBST([PYTHON_LIBS])
|
||||
|
||||
#
|
||||
# Check for site packages
|
||||
|
@ -265,7 +265,7 @@ EOD`
|
|||
if test -z "$PYTHON_EXTRA_LIBS"; then
|
||||
PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
|
||||
conf = distutils.sysconfig.get_config_var; \
|
||||
print (conf('LOCALMODLIBS') + ' ' + conf('LIBS'))"`
|
||||
print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
|
||||
AC_SUBST(PYTHON_EXTRA_LIBS)
|
||||
|
@ -288,8 +288,10 @@ EOD`
|
|||
AC_MSG_CHECKING([consistency of all components of python development environment])
|
||||
# save current global flags
|
||||
ac_save_LIBS="$LIBS"
|
||||
ac_save_LDFLAGS="$LDFLAGS"
|
||||
ac_save_CPPFLAGS="$CPPFLAGS"
|
||||
LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
|
||||
LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
|
||||
LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
|
||||
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
|
||||
AC_LANG_PUSH([C])
|
||||
AC_LINK_IFELSE([
|
||||
|
@ -300,6 +302,7 @@ EOD`
|
|||
# turn back to default flags
|
||||
CPPFLAGS="$ac_save_CPPFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
LDFLAGS="$ac_save_LDFLAGS"
|
||||
|
||||
AC_MSG_RESULT([$pythonexists])
|
||||
|
||||
|
@ -307,8 +310,8 @@ EOD`
|
|||
AC_MSG_FAILURE([
|
||||
Could not link test program to Python. Maybe the main Python library has been
|
||||
installed in some non-standard library path. If so, pass it to configure,
|
||||
via the LDFLAGS environment variable.
|
||||
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
|
||||
via the LIBS environment variable.
|
||||
Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
|
||||
============================================================================
|
||||
ERROR!
|
||||
You probably have to install the development version of the Python package
|
||||
|
|
Ładowanie…
Reference in New Issue