PolarDB-for-PostgreSQL

Форк
0
183 строки · 7.0 Кб
1
#
2
# Autoconf macros for configuring the build of Python extension modules
3
#
4
# config/python.m4
5
#
6

7
# PGAC_PATH_PYTHON
8
# ----------------
9
# Look for Python and set the output variable 'PYTHON' if found,
10
# fail otherwise.
11
#
12
# As the Python 3 transition happens and PEP 394 isn't updated, we
13
# need to cater to systems that don't have unversioned "python" by
14
# default.  Some systems ship with "python3" by default and perhaps
15
# have "python" in an optional package.  Some systems only have
16
# "python2" and "python3", in which case it's reasonable to prefer the
17
# newer version.
18
AC_DEFUN([PGAC_PATH_PYTHON],
19
[PGAC_PATH_PROGS(PYTHON, [python python3 python2])
20
if test x"$PYTHON" = x""; then
21
  AC_MSG_ERROR([Python not found])
22
fi
23
])
24

25

26
# _PGAC_CHECK_PYTHON_DIRS
27
# -----------------------
28
# Determine the name of various directories of a given Python installation,
29
# as well as the Python version.
30
AC_DEFUN([_PGAC_CHECK_PYTHON_DIRS],
31
[AC_REQUIRE([PGAC_PATH_PYTHON])
32
python_fullversion=`${PYTHON} -c "import sys; print(sys.version)" | sed q`
33
AC_MSG_NOTICE([using python $python_fullversion])
34
# python_fullversion is typically n.n.n plus some trailing junk
35
python_majorversion=`echo "$python_fullversion" | sed '[s/^\([0-9]*\).*/\1/]'`
36
python_minorversion=`echo "$python_fullversion" | sed '[s/^[0-9]*\.\([0-9]*\).*/\1/]'`
37
python_version=`echo "$python_fullversion" | sed '[s/^\([0-9]*\.[0-9]*\).*/\1/]'`
38
# Reject unsupported Python versions as soon as practical.
39
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 4; then
40
  AC_MSG_ERROR([Python version $python_version is too old (version 2.4 or later is required)])
41
fi
42

43
AC_MSG_CHECKING([for Python distutils module])
44
if "${PYTHON}" -c 'import distutils' 2>&AS_MESSAGE_LOG_FD
45
then
46
    AC_MSG_RESULT(yes)
47
else
48
    AC_MSG_RESULT(no)
49
    AC_MSG_ERROR([distutils module not found])
50
fi
51

52
AC_MSG_CHECKING([Python configuration directory])
53
python_configdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBPL'))))"`
54
AC_MSG_RESULT([$python_configdir])
55

56
AC_MSG_CHECKING([Python include directories])
57
python_includespec=`${PYTHON} -c "
58
import distutils.sysconfig
59
a = '-I' + distutils.sysconfig.get_python_inc(False)
60
b = '-I' + distutils.sysconfig.get_python_inc(True)
61
if a == b:
62
    print(a)
63
else:
64
    print(a + ' ' + b)"`
65
if test "$PORTNAME" = win32 ; then
66
    python_includespec=`echo $python_includespec | sed 's,[[\]],/,g'`
67
fi
68
AC_MSG_RESULT([$python_includespec])
69

70
AC_SUBST(python_majorversion)[]dnl
71
AC_SUBST(python_version)[]dnl
72
AC_SUBST(python_includespec)[]dnl
73
])# _PGAC_CHECK_PYTHON_DIRS
74

75

76
# PGAC_CHECK_PYTHON_EMBED_SETUP
77
# -----------------------------
78
#
79
# Set python_libdir to the path of the directory containing the Python shared
80
# library.  Set python_libspec to the -L/-l linker switches needed to link it.
81
# Set python_additional_libs to contain any additional linker switches needed
82
# for subsidiary libraries.
83
#
84
# In modern, well-configured Python installations, LIBDIR gives the correct
85
# directory name and LDLIBRARY is the file name of the shlib.  But in older
86
# installations LDLIBRARY is frequently a useless path fragment, and it's also
87
# possible that the shlib is in a standard library directory such as /usr/lib
88
# so that LIBDIR is irrelevant.  Also, some packagers put the .so symlink for
89
# the shlib in ${python_configdir} even though Python itself never does.
90
# We must also check that what we found is a shared library not a plain
91
# library, which we do by checking its extension.  (We used to rely on
92
# Py_ENABLE_SHARED, but that only tells us that a shlib exists, not that
93
# we found it.)
94
AC_DEFUN([PGAC_CHECK_PYTHON_EMBED_SETUP],
95
[AC_REQUIRE([_PGAC_CHECK_PYTHON_DIRS])
96
AC_MSG_CHECKING([how to link an embedded Python application])
97

98
python_libdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBDIR'))))"`
99
python_ldlibrary=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDLIBRARY'))))"`
100

101
# If LDLIBRARY exists and has a shlib extension, use it verbatim.
102
ldlibrary=`echo "${python_ldlibrary}" | sed -e 's/\.so$//' -e 's/\.dll$//' -e 's/\.dylib$//' -e 's/\.sl$//'`
103
if test -e "${python_libdir}/${python_ldlibrary}" -a x"${python_ldlibrary}" != x"${ldlibrary}"
104
then
105
	ldlibrary=`echo "${ldlibrary}" | sed "s/^lib//"`
106
	found_shlib=1
107
else
108
	# Otherwise, guess the base name of the shlib.
109
	# LDVERSION was added in Python 3.2, before that use VERSION,
110
	# or failing that, $python_version from _PGAC_CHECK_PYTHON_DIRS.
111
	python_ldversion=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDVERSION'))))"`
112
	if test x"${python_ldversion}" != x""; then
113
		ldlibrary="python${python_ldversion}"
114
	else
115
		python_version_var=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('VERSION'))))"`
116
		if test x"${python_version_var}" != x""; then
117
			ldlibrary="python${python_version_var}"
118
		else
119
			ldlibrary="python${python_version}"
120
		fi
121
	fi
122
	# Search for a likely-looking file.
123
	found_shlib=0
124
	for d in "${python_libdir}" "${python_configdir}" /usr/lib64 /usr/lib
125
	do
126
		# We don't know the platform DLSUFFIX here, so check 'em all.
127
		for e in .so .dll .dylib .sl; do
128
			if test -e "$d/lib${ldlibrary}$e"; then
129
				python_libdir="$d"
130
				found_shlib=1
131
				break 2
132
			fi
133
		done
134
	done
135
	# Some platforms (OpenBSD) require us to accept a bare versioned shlib
136
	# (".so.n.n") as well. However, check this only after failing to find
137
	# ".so" anywhere, because yet other platforms (Debian) put the .so
138
	# symlink in a different directory from the underlying versioned shlib.
139
	if test "$found_shlib" != 1; then
140
		for d in "${python_libdir}" "${python_configdir}" /usr/lib64 /usr/lib
141
		do
142
			for f in "$d/lib${ldlibrary}.so."* ; do
143
				if test -e "$f"; then
144
					python_libdir="$d"
145
					found_shlib=1
146
					break 2
147
				fi
148
			done
149
		done
150
	fi
151
	# As usual, Windows has its own ideas.  Possible default library
152
	# locations include c:/Windows/System32 and (for Cygwin) /usr/bin,
153
	# and the "lib" prefix might not be there.
154
	if test "$found_shlib" != 1 -a \( "$PORTNAME" = win32 -o "$PORTNAME" = cygwin \); then
155
		for d in "${python_libdir}" "${python_configdir}" c:/Windows/System32 /usr/bin
156
		do
157
			for f in "$d/lib${ldlibrary}.dll" "$d/${ldlibrary}.dll" ; do
158
				if test -e "$f"; then
159
					python_libdir="$d"
160
					found_shlib=1
161
					break 2
162
				fi
163
			done
164
		done
165
	fi
166
fi
167
if test "$found_shlib" != 1; then
168
	AC_MSG_ERROR([could not find shared library for Python
169
You might have to rebuild your Python installation.  Refer to the
170
documentation for details.  Use --without-python to disable building
171
PL/Python.])
172
fi
173
python_libspec="-L${python_libdir} -l${ldlibrary}"
174

175
python_additional_libs=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBS','LIBC','LIBM','BASEMODLIBS'))))"`
176

177
AC_MSG_RESULT([${python_libspec} ${python_additional_libs}])
178

179
AC_SUBST(python_libdir)[]dnl
180
AC_SUBST(python_libspec)[]dnl
181
AC_SUBST(python_additional_libs)[]dnl
182

183
])# PGAC_CHECK_PYTHON_EMBED_SETUP
184

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.