Files
nginx-unit/auto/modules/python
Max Romanov ad518ae6c4 Python: fixing Python 3.8 build with clang.
Python 3.8 has 'tp_print' field in PyTypeObject struct.  This field is
attributed as deprecated.  So, clang generates warning (which is turned to
error) as a result of initializing this field.  From the other hand, it is
impossible to omit this field in positional initialization.  The solution
is to use designated initializer.

Silencing usage message during configure python.

This is related to #331 issue on GitHub.
2019-10-23 14:04:29 +03:00

199 lines
4.5 KiB
Plaintext

# Copyright (C) Valentin V. Bartenev
# Copyright (C) Igor Sysoev
# Copyright (C) NGINX, Inc.
shift
for nxt_option; do
case "$nxt_option" in
-*=*) value=`echo "$nxt_option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
*) value="" ;;
esac
case "$nxt_option" in
--config=*) NXT_PYTHON_CONFIG="$value" ;;
--module=*) NXT_PYTHON_MODULE="$value" ;;
--lib-path=*) NXT_PYTHON_LIB_PATH="$value" ;;
--help)
cat << END
--config=FILE set python-config filename
--module=NAME set unit python module name
--lib-path=DIRECTORY set directory path to libpython.so library
END
exit 0
;;
*)
echo
echo $0: error: invalid Python option \"$nxt_option\"
echo
exit 1
;;
esac
done
if [ ! -f $NXT_AUTOCONF_DATA ]; then
echo
echo Please run common $0 before configuring module \"$nxt_module\".
echo
exit 1
fi
. $NXT_AUTOCONF_DATA
NXT_PYTHON_CONFIG=${NXT_PYTHON_CONFIG=python-config}
NXT_PYTHON=${NXT_PYTHON_CONFIG%-config*}
NXT_PYTHON_MODULE=${NXT_PYTHON_MODULE=${NXT_PYTHON##*/}}
NXT_PYTHON_LIB_PATH=${NXT_PYTHON_LIB_PATH=}
$echo "configuring Python module"
$echo "configuring Python module ..." >> $NXT_AUTOCONF_ERR
nxt_found=no
if /bin/sh -c "$NXT_PYTHON_CONFIG --prefix" >> $NXT_AUTOCONF_ERR 2>&1; then
if ${NXT_PYTHON_CONFIG} --embed >/dev/null 2>&1; then
NXT_PYTHON_CONFIG="${NXT_PYTHON_CONFIG} --embed"
fi
NXT_PYTHON_INCLUDE=`${NXT_PYTHON_CONFIG} --includes`
NXT_PYTHON_LIBS=`${NXT_PYTHON_CONFIG} --ldflags`
if [ "$NXT_PYTHON_LIB_PATH" != "" ]; then
# "python-config --ldflags" may not contain path to libpython.
NXT_PYTHON_LDFLAGS="-L$NXT_PYTHON_LIB_PATH -Wl,-rpath $NXT_PYTHON_LIB_PATH"
else
NXT_PYTHON_LDFLAGS=""
fi
nxt_feature="Python"
nxt_feature_name=""
nxt_feature_run=no
nxt_feature_incs="${NXT_PYTHON_INCLUDE}"
nxt_feature_libs="${NXT_PYTHON_LIBS} $NXT_PYTHON_LDFLAGS"
nxt_feature_test="
#include <Python.h>
int main() {
Py_Initialize();
return 0;
}"
. auto/feature
else
$echo "checking for Python ... not found"
fi
if [ $nxt_found = no ]; then
$echo
$echo $0: error: no Python found.
$echo
exit 1;
fi
nxt_feature="Python version"
nxt_feature_name=""
nxt_feature_run=value
nxt_feature_incs="${NXT_PYTHON_INCLUDE}"
nxt_feature_libs="${NXT_PYTHON_LIBS} $NXT_PYTHON_LDFLAGS"
nxt_feature_test="
#include <Python.h>
#include <stdio.h>
int main() {
printf(\"%s\", PY_VERSION);
return 0;
}"
. auto/feature
if grep ^$NXT_PYTHON_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then
$echo
$echo $0: error: duplicate \"$NXT_PYTHON_MODULE\" module configured.
$echo
exit 1;
fi
$echo " + Python module: ${NXT_PYTHON_MODULE}.unit.so"
. auto/cc/deps
$echo >> $NXT_MAKEFILE
NXT_PYTHON_MODULE_SRCS=" \
src/nxt_python_wsgi.c \
"
# The python module object files.
nxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o
for nxt_src in $NXT_PYTHON_MODULE_SRCS; do
nxt_obj=${nxt_src%.c}-$NXT_PYTHON_MODULE.o
nxt_dep=${nxt_src%.c}-$NXT_PYTHON_MODULE.dep
nxt_dep_flags=`nxt_gen_dep_flags`
nxt_dep_post=`nxt_gen_dep_post`
nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj"
cat << END >> $NXT_MAKEFILE
$NXT_BUILD_DIR/$nxt_obj: $nxt_src $NXT_VERSION_H
\$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_PYTHON_INCLUDE \\
$nxt_dep_flags \\
-o $NXT_BUILD_DIR/$nxt_obj $nxt_src
$nxt_dep_post
-include $NXT_BUILD_DIR/$nxt_dep
END
done
cat << END >> $NXT_MAKEFILE
.PHONY: ${NXT_PYTHON_MODULE}
.PHONY: ${NXT_PYTHON_MODULE}-install
.PHONY: ${NXT_PYTHON_MODULE}-uninstall
all: ${NXT_PYTHON_MODULE}
${NXT_PYTHON_MODULE}: $NXT_BUILD_DIR/${NXT_PYTHON_MODULE}.unit.so
$NXT_BUILD_DIR/${NXT_PYTHON_MODULE}.unit.so: $nxt_objs
\$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_PYTHON_MODULE}.unit.so \\
$nxt_objs $NXT_PYTHON_LIBS $NXT_PYTHON_LDFLAGS $NXT_LD_OPT
install: ${NXT_PYTHON_MODULE}-install
${NXT_PYTHON_MODULE}-install: ${NXT_PYTHON_MODULE} install-check
install -d \$(DESTDIR)$NXT_MODULES
install -p $NXT_BUILD_DIR/${NXT_PYTHON_MODULE}.unit.so \\
\$(DESTDIR)$NXT_MODULES/
uninstall: ${NXT_PYTHON_MODULE}-uninstall
${NXT_PYTHON_MODULE}-uninstall:
rm -f \$(DESTDIR)$NXT_MODULES/${NXT_PYTHON_MODULE}.unit.so
@rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true
END