Collection of DPF-based plugins for packaging
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

328 lines
11KB

  1. # ===========================================================================
  2. # https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
  3. # ===========================================================================
  4. #
  5. # SYNOPSIS
  6. #
  7. # AX_PYTHON_DEVEL([version])
  8. #
  9. # DESCRIPTION
  10. #
  11. # Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
  12. # in your configure.ac.
  13. #
  14. # This macro checks for Python and tries to get the include path to
  15. # 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output
  16. # variables. It also exports $(PYTHON_EXTRA_LIBS) and
  17. # $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
  18. #
  19. # You can search for some particular version of Python by passing a
  20. # parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
  21. # note that you *have* to pass also an operator along with the version to
  22. # match, and pay special attention to the single quotes surrounding the
  23. # version number. Don't use "PYTHON_VERSION" for this: that environment
  24. # variable is declared as precious and thus reserved for the end-user.
  25. #
  26. # This macro should work for all versions of Python >= 2.1.0. As an end
  27. # user, you can disable the check for the python version by setting the
  28. # PYTHON_NOVERSIONCHECK environment variable to something else than the
  29. # empty string.
  30. #
  31. # If you need to use this macro for an older Python version, please
  32. # contact the authors. We're always open for feedback.
  33. #
  34. # LICENSE
  35. #
  36. # Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de>
  37. # Copyright (c) 2009 Alan W. Irwin
  38. # Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net>
  39. # Copyright (c) 2009 Andrew Collier
  40. # Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org>
  41. # Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org>
  42. # Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu>
  43. #
  44. # This program is free software: you can redistribute it and/or modify it
  45. # under the terms of the GNU General Public License as published by the
  46. # Free Software Foundation, either version 3 of the License, or (at your
  47. # option) any later version.
  48. #
  49. # This program is distributed in the hope that it will be useful, but
  50. # WITHOUT ANY WARRANTY; without even the implied warranty of
  51. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  52. # Public License for more details.
  53. #
  54. # You should have received a copy of the GNU General Public License along
  55. # with this program. If not, see <https://www.gnu.org/licenses/>.
  56. #
  57. # As a special exception, the respective Autoconf Macro's copyright owner
  58. # gives unlimited permission to copy, distribute and modify the configure
  59. # scripts that are the output of Autoconf when processing the Macro. You
  60. # need not follow the terms of the GNU General Public License when using
  61. # or distributing such scripts, even though portions of the text of the
  62. # Macro appear in them. The GNU General Public License (GPL) does govern
  63. # all other use of the material that constitutes the Autoconf Macro.
  64. #
  65. # This special exception to the GPL applies to versions of the Autoconf
  66. # Macro released by the Autoconf Archive. When you make and distribute a
  67. # modified version of the Autoconf Macro, you may extend this special
  68. # exception to the GPL to apply to your modified version as well.
  69. #serial 21
  70. AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
  71. AC_DEFUN([AX_PYTHON_DEVEL],[
  72. #
  73. # Allow the use of a (user set) custom python version
  74. #
  75. AC_ARG_VAR([PYTHON_VERSION],[The installed Python
  76. version to use, for example '2.3'. This string
  77. will be appended to the Python interpreter
  78. canonical name.])
  79. AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
  80. if test -z "$PYTHON"; then
  81. AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
  82. PYTHON_VERSION=""
  83. fi
  84. #
  85. # Check for a version of Python >= 2.1.0
  86. #
  87. AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
  88. ac_supports_python_ver=`$PYTHON -c "import sys; \
  89. ver = sys.version.split ()[[0]]; \
  90. print (ver >= '2.1.0')"`
  91. if test "$ac_supports_python_ver" != "True"; then
  92. if test -z "$PYTHON_NOVERSIONCHECK"; then
  93. AC_MSG_RESULT([no])
  94. AC_MSG_FAILURE([
  95. This version of the AC@&t@_PYTHON_DEVEL macro
  96. doesn't work properly with versions of Python before
  97. 2.1.0. You may need to re-run configure, setting the
  98. variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
  99. PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
  100. Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
  101. to something else than an empty string.
  102. ])
  103. else
  104. AC_MSG_RESULT([skip at user request])
  105. fi
  106. else
  107. AC_MSG_RESULT([yes])
  108. fi
  109. #
  110. # if the macro parameter ``version'' is set, honour it
  111. #
  112. if test -n "$1"; then
  113. AC_MSG_CHECKING([for a version of Python $1])
  114. ac_supports_python_ver=`$PYTHON -c "import sys; \
  115. ver = sys.version.split ()[[0]]; \
  116. print (ver $1)"`
  117. if test "$ac_supports_python_ver" = "True"; then
  118. AC_MSG_RESULT([yes])
  119. else
  120. AC_MSG_RESULT([no])
  121. AC_MSG_ERROR([this package requires Python $1.
  122. If you have it installed, but it isn't the default Python
  123. interpreter in your system path, please pass the PYTHON_VERSION
  124. variable to configure. See ``configure --help'' for reference.
  125. ])
  126. PYTHON_VERSION=""
  127. fi
  128. fi
  129. #
  130. # Check if you have distutils, else fail
  131. #
  132. AC_MSG_CHECKING([for the distutils Python package])
  133. ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
  134. if test $? -eq 0; then
  135. AC_MSG_RESULT([yes])
  136. else
  137. AC_MSG_RESULT([no])
  138. AC_MSG_ERROR([cannot import Python module "distutils".
  139. Please check your Python installation. The error was:
  140. $ac_distutils_result])
  141. PYTHON_VERSION=""
  142. fi
  143. #
  144. # Check for Python include path
  145. #
  146. AC_MSG_CHECKING([for Python include path])
  147. if test -z "$PYTHON_CPPFLAGS"; then
  148. python_path=`$PYTHON -c "import distutils.sysconfig; \
  149. print (distutils.sysconfig.get_python_inc ());"`
  150. plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
  151. print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
  152. if test -n "${python_path}"; then
  153. if test "${plat_python_path}" != "${python_path}"; then
  154. python_path="-I$python_path -I$plat_python_path"
  155. else
  156. python_path="-I$python_path"
  157. fi
  158. fi
  159. PYTHON_CPPFLAGS=$python_path
  160. fi
  161. AC_MSG_RESULT([$PYTHON_CPPFLAGS])
  162. AC_SUBST([PYTHON_CPPFLAGS])
  163. #
  164. # Check for Python library path
  165. #
  166. AC_MSG_CHECKING([for Python library path])
  167. if test -z "$PYTHON_LIBS"; then
  168. # (makes two attempts to ensure we've got a version number
  169. # from the interpreter)
  170. ac_python_version=`cat<<EOD | $PYTHON -
  171. # join all versioning strings, on some systems
  172. # major/minor numbers could be in different list elements
  173. from distutils.sysconfig import *
  174. e = get_config_var('VERSION')
  175. if e is not None:
  176. print(e)
  177. EOD`
  178. if test -z "$ac_python_version"; then
  179. if test -n "$PYTHON_VERSION"; then
  180. ac_python_version=$PYTHON_VERSION
  181. else
  182. ac_python_version=`$PYTHON -c "import sys; \
  183. print (sys.version[[:3]])"`
  184. fi
  185. fi
  186. # Make the versioning information available to the compiler
  187. AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
  188. [If available, contains the Python version number currently in use.])
  189. # First, the library directory:
  190. ac_python_libdir=`cat<<EOD | $PYTHON -
  191. # There should be only one
  192. import distutils.sysconfig
  193. e = distutils.sysconfig.get_config_var('LIBDIR')
  194. if e is not None:
  195. print (e)
  196. EOD`
  197. # Now, for the library:
  198. ac_python_library=`cat<<EOD | $PYTHON -
  199. import distutils.sysconfig
  200. c = distutils.sysconfig.get_config_vars()
  201. if 'LDVERSION' in c:
  202. print ('python'+c[['LDVERSION']])
  203. else:
  204. print ('python'+c[['VERSION']])
  205. EOD`
  206. # This small piece shamelessly adapted from PostgreSQL python macro;
  207. # credits goes to momjian, I think. I'd like to put the right name
  208. # in the credits, if someone can point me in the right direction... ?
  209. #
  210. if test -n "$ac_python_libdir" -a -n "$ac_python_library"
  211. then
  212. # use the official shared library
  213. ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
  214. PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
  215. else
  216. # old way: use libpython from python_configdir
  217. ac_python_libdir=`$PYTHON -c \
  218. "from distutils.sysconfig import get_python_lib as f; \
  219. import os; \
  220. print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
  221. PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
  222. fi
  223. if test -z "PYTHON_LIBS"; then
  224. AC_MSG_ERROR([
  225. Cannot determine location of your Python DSO. Please check it was installed with
  226. dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
  227. ])
  228. fi
  229. fi
  230. AC_MSG_RESULT([$PYTHON_LIBS])
  231. AC_SUBST([PYTHON_LIBS])
  232. #
  233. # Check for site packages
  234. #
  235. AC_MSG_CHECKING([for Python site-packages path])
  236. if test -z "$PYTHON_SITE_PKG"; then
  237. PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
  238. print (distutils.sysconfig.get_python_lib(0,0));"`
  239. fi
  240. AC_MSG_RESULT([$PYTHON_SITE_PKG])
  241. AC_SUBST([PYTHON_SITE_PKG])
  242. #
  243. # libraries which must be linked in when embedding
  244. #
  245. AC_MSG_CHECKING(python extra libraries)
  246. if test -z "$PYTHON_EXTRA_LIBS"; then
  247. PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
  248. conf = distutils.sysconfig.get_config_var; \
  249. print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
  250. fi
  251. AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
  252. AC_SUBST(PYTHON_EXTRA_LIBS)
  253. #
  254. # linking flags needed when embedding
  255. #
  256. AC_MSG_CHECKING(python extra linking flags)
  257. if test -z "$PYTHON_EXTRA_LDFLAGS"; then
  258. PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
  259. conf = distutils.sysconfig.get_config_var; \
  260. print (conf('LINKFORSHARED'))"`
  261. fi
  262. AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
  263. AC_SUBST(PYTHON_EXTRA_LDFLAGS)
  264. #
  265. # final check to see if everything compiles alright
  266. #
  267. AC_MSG_CHECKING([consistency of all components of python development environment])
  268. # save current global flags
  269. ac_save_LIBS="$LIBS"
  270. ac_save_LDFLAGS="$LDFLAGS"
  271. ac_save_CPPFLAGS="$CPPFLAGS"
  272. LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
  273. LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
  274. CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
  275. AC_LANG_PUSH([C])
  276. AC_LINK_IFELSE([
  277. AC_LANG_PROGRAM([[#include <Python.h>]],
  278. [[Py_Initialize();]])
  279. ],[pythonexists=yes],[pythonexists=no])
  280. AC_LANG_POP([C])
  281. # turn back to default flags
  282. CPPFLAGS="$ac_save_CPPFLAGS"
  283. LIBS="$ac_save_LIBS"
  284. LDFLAGS="$ac_save_LDFLAGS"
  285. AC_MSG_RESULT([$pythonexists])
  286. if test ! "x$pythonexists" = "xyes"; then
  287. AC_MSG_FAILURE([
  288. Could not link test program to Python. Maybe the main Python library has been
  289. installed in some non-standard library path. If so, pass it to configure,
  290. via the LIBS environment variable.
  291. Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
  292. ============================================================================
  293. ERROR!
  294. You probably have to install the development version of the Python package
  295. for your distribution. The exact name of this package varies among them.
  296. ============================================================================
  297. ])
  298. PYTHON_VERSION=""
  299. fi
  300. #
  301. # all done!
  302. #
  303. ])