xref: /unit/auto/modules/python (revision 216:07257705cd64)
1
2# Copyright (C) Valentin V. Bartenev
3# Copyright (C) Igor Sysoev
4# Copyright (C) NGINX, Inc.
5
6
7shift
8
9for nxt_option; do
10
11    case "$nxt_option" in
12        -*=*) value=`$echo "$nxt_option" | sed -e 's/[-_a-zA-Z0-9]*=//'`     ;;
13           *) value="" ;;
14    esac
15
16    case "$nxt_option" in
17
18        --config=*)  NXT_PYTHON_CONFIG="$value"                              ;;
19        --module=*)  NXT_PYTHON_MODULE="$value"                              ;;
20
21        --help)
22            cat << END
23
24    --config=NAME   set python-config name
25    --module=NAME   set python module name
26
27END
28            exit 0
29        ;;
30
31        *)
32            $echo
33            $echo $0: error: invalid Python option \"$nxt_option\"
34            $echo
35            exit 1
36        ;;
37    esac
38
39done
40
41
42NXT_PYTHON_CONFIG=${NXT_PYTHON_CONFIG=python-config}
43NXT_PYTHON=${NXT_PYTHON_CONFIG%-config*}
44NXT_PYTHON_MODULE=${NXT_PYTHON_MODULE=${NXT_PYTHON##*/}}
45
46
47$echo "configuring Python module"
48$echo "configuring Python module ..." >> $NXT_AUTOCONF_ERR
49
50nxt_found=no
51
52if /bin/sh -c "$NXT_PYTHON_CONFIG --prefix" >> $NXT_AUTOCONF_ERR 2>&1; then
53
54    NXT_PYTHON_INCLUDE=`${NXT_PYTHON_CONFIG} --includes`
55    NXT_PYTHON_LIBS=`${NXT_PYTHON_CONFIG} --ldflags`
56
57    nxt_feature="Python"
58    nxt_feature_name=NXT_HAVE_PYTHON
59    nxt_feature_run=no
60    nxt_feature_incs="${NXT_PYTHON_INCLUDE}"
61    nxt_feature_libs="${NXT_PYTHON_LIBS}"
62    nxt_feature_test="
63        #include <Python.h>
64
65        int main() {
66            Py_Initialize();
67            return 0;
68        }"
69
70    . auto/feature
71
72else
73    $echo "checking for Python ... not found"
74fi
75
76if [ $nxt_found = no ]; then
77    $echo
78    $echo $0: error: no Python found.
79    $echo
80    exit 1;
81fi
82
83
84nxt_feature="Python version"
85nxt_feature_name=NXT_PYTHON_VERSION
86nxt_feature_run=value
87nxt_feature_incs="${NXT_PYTHON_INCLUDE}"
88nxt_feature_libs="${NXT_PYTHON_LIBS}"
89nxt_feature_test="
90    #include <Python.h>
91    #include <stdio.h>
92
93    int main() {
94        printf("PY_VERSION");
95        return 0;
96    }"
97
98. auto/feature
99
100
101if grep ^$NXT_PYTHON_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then
102    $echo
103    $echo $0: error: duplicate \"$NXT_PYTHON_MODULE\" module configured.
104    $echo
105    exit 1;
106fi
107
108$echo " + Python module: nginext.${NXT_PYTHON_MODULE}"
109
110
111$echo >> $NXT_MAKEFILE
112
113NXT_PYTHON_MODULE_SRCS=" \
114    src/nxt_python_wsgi.c \
115"
116
117# The python module object files.
118
119nxt_objs=
120
121for nxt_src in $NXT_PYTHON_MODULE_SRCS; do
122
123    nxt_obj=`$echo $nxt_src | sed -e "s/\.c$/-$NXT_PYTHON_MODULE.o/"`
124    nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj"
125
126    cat << END >> $NXT_MAKEFILE
127
128$NXT_BUILD_DIR/$nxt_obj:	$nxt_src
129	\$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_PYTHON_INCLUDE \\
130	-o $NXT_BUILD_DIR/$nxt_obj $nxt_src
131END
132
133done
134
135
136cat << END >> $NXT_MAKEFILE
137
138.PHONY:			${NXT_PYTHON_MODULE}
139
140${NXT_PYTHON_MODULE}:	$NXT_BUILD_DIR/nginext.${NXT_PYTHON_MODULE}
141
142$NXT_BUILD_DIR/nginext.${NXT_PYTHON_MODULE}:	$nxt_objs
143	$NXT_MODULE_LINK -o $NXT_BUILD_DIR/nginext.${NXT_PYTHON_MODULE} \\
144	$nxt_objs $NXT_PYTHON_LIBS
145
146END
147
148sed -i.bak -e "s/\(all:.*\)/\1 ${NXT_PYTHON_MODULE}/" $NXT_MAKEFILE
149