summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-08-29 21:40:03 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-08-29 21:40:03 +0200
commit42dcfa19000aa2f02e94cc9b4c1c99c667a539ab (patch)
treee61c6887dd56fb13c16cd557f8f81b80c7737590
parent35e49b858a29578f6b4925de2e56a80b829e9c59 (diff)
downloadbackoffice-42dcfa19000aa2f02e94cc9b4c1c99c667a539ab.tar.gz
backoffice-42dcfa19000aa2f02e94cc9b4c1c99c667a539ab.tar.bz2
backoffice-42dcfa19000aa2f02e94cc9b4c1c99c667a539ab.zip
simple build system
-rw-r--r--.gitignore17
-rw-r--r--.style.yapf5
-rw-r--r--Makefile58
-rw-r--r--Makefile.in72
-rw-r--r--backoffice.wsgi.in21
-rwxr-xr-xbootstrap12
-rwxr-xr-xconfigure87
-rw-r--r--configure.ac90
-rw-r--r--m4/ax_compare_version.m4177
-rw-r--r--m4/python.m4646
-rwxr-xr-xsetup.py4
-rw-r--r--taler-merchant-backoffice.in93
12 files changed, 153 insertions, 1129 deletions
diff --git a/.gitignore b/.gitignore
index 09e4992..93a8e08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,24 +1,9 @@
-Makefile
-!talerbackoffice/backoffice/templates/Makefile
-aclocal.m4
-autom4te.cache/
-compile
-config.log
-config.status
-configure
-install-sh
-missing
talerbackoffice.egg-info/
-talerbackoffice/__pycache__/
-talerbackoffice/backoffice/__pycache__/
+__pycache__
talerbackoffice/backoffice/static/*.js
backoffice.wsgi
taler-merchant-backoffice
js/node_modules/
js/yarn.lock
-doc/*
-!doc/*.texi
-!doc/Makefile
-!doc/*.css
*.mo
*.po~
diff --git a/.style.yapf b/.style.yapf
new file mode 100644
index 0000000..3b39780
--- /dev/null
+++ b/.style.yapf
@@ -0,0 +1,5 @@
+[style]
+based_on_style = pep8
+coalesce_brackets=True
+column_limit=80
+dedent_closing_brackets=True
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fd33bfc
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,58 @@
+install_global=false
+-include config.mk
+
+SUBDIRS = talerbackoffice/backoffice/templates
+ava = js/node_modules/.bin/ava
+
+.PHONY: all
+all:
+ @echo "This is a python project, no compilation required"
+
+.PHONY: check-js
+check-js:
+ @cd js; yarn install
+ @$(ava) js/node_modules/.bin/ava js/test/main.js
+
+.PHONY: install
+
+ifeq ($(install_global), true)
+install: install-deps install-global
+else
+install: install-local
+endif
+
+.PHONY: install-global
+install-global:
+ pip3 install .
+
+.PHONY: install-local
+install-local:
+ pip3 install . --user
+
+.PHONY: copy-js
+copy-js:
+ @cp js/*.js talerbackoffice/backoffice/static
+
+install-deps: compile-i18n copy-js
+
+compile-i18n:
+ $(MAKE) -C talerbackoffice/backoffice/templates compile
+
+# run testcases
+.PHONY: check
+check:
+ @export TALER_CONFIG_FILE=@abs_srcdir@/talerbackoffice/tests.conf; \
+ export BACKOFFICE_BACKEND="http://backend.example.com/"; \
+ export BACKOFFICE_INSTANCES="MusicShop"; python3 setup.py test
+
+.PHONY: pylint
+pylint:
+ @pylint talerbackoffice/
+
+.PHONY: dist
+dist:
+ git archive --format=tar.gz HEAD -o taler-backoffice.tar.gz
+
+.PHONY: pretty
+pretty:
+ yapf -r -i talerbackoffice/
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index 3748959..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,72 +0,0 @@
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL)
-INSTALL_DATA = $(INSTALL) -m 644
-prefix = @prefix@
-srcdir = @srcdir@
-SUBDIRS = talerbackoffice/backoffice/templates
-
-script_templates = taler-merchant-backoffice backoffice.wsgi
-templates = Makefile $(script_templates)
-ava = js/node_modules/.bin/ava
-edit = sed -e 's|@prefix[@]|$(prefix)|g'
-
-.PHONY: all
-all: $(SUBDIRS) $(templates)
- cd talerbackoffice/backoffice/static/web-common && make && cd -
-
-.PHONY: $(SUBDIRS)
-$(SUBDIRS):
- $(MAKE) -C $@
-
-Makefile: Makefile.in
- ./config.status $@
-
-$(script_templates): %: Makefile %.in
- rm -f $@ $@.tmp
- $(edit) '$(srcdir)/$@.in' >$@.tmp
- mv $@.tmp $@
-
-.PHONY: check-js
-check-js:
- @cd js; yarn install
- @$(ava) js/node_modules/.bin/ava js/test/main.js
-
-.PHONY: install-js
-install-js:
- @cp js/*.js talerbackoffice/backoffice/static
-
-.PHONY: install-data
-install-data: $(templates) install-js
- @$(INSTALL_DATA) -Dt $(prefix)/share/taler/ backoffice.wsgi
-
-# @test -n "$$(ls -A talerbank/app/static/web-common/)" || \
-# (echo "please check out git submodules"; exit 1)
-
-
-
-# link package under prefix to source tree
-.PHONY: devinstall
-devinstall: $(templates) install-data
- @pip3 install -e . --install-option="--prefix=@prefix@"
-
-compile-lang:
- $(MAKE) -C talerbackoffice/backoffice/templates compile
-
-# install into prefix
-.PHONY: install
-install: $(templates) install-data compile-lang
- @pip3 install . @DEBIAN_PIP3_SYSTEM@ --install-option="--prefix=@prefix@"
- @# force update when sources changed
- @pip3 install . @DEBIAN_PIP3_SYSTEM@ --install-option="--prefix=@prefix@" --upgrade --no-deps
- cd talerbackoffice/backoffice/static/web-common && make install && cd -
-
-# run testcases
-.PHONY: check
-check:
- @export TALER_CONFIG_FILE=@abs_srcdir@/talerbackoffice/tests.conf; \
- export BACKOFFICE_BACKEND="http://backend.example.com/"; \
- export BACKOFFICE_INSTANCES="MusicShop"; python3 setup.py test
-
-.PHONY: pylint
-pylint:
- @pylint talerbackoffice/
diff --git a/backoffice.wsgi.in b/backoffice.wsgi.in
deleted file mode 100644
index 7823756..0000000
--- a/backoffice.wsgi.in
+++ /dev/null
@@ -1,21 +0,0 @@
-import sys
-
-if sys.version_info.major < 3:
- print("The taler bank needs to run with Python>=3.4")
- sys.exit(1)
-
-import site
-import os
-import logging
-
-logging.basicConfig(level=logging.INFO)
-
-os.environ.setdefault("TALER_PREFIX", "@prefix@")
-site.addsitedir("%s/lib/python%d.%d/site-packages" % (
- "@prefix@",
- sys.version_info.major,
- sys.version_info.minor))
-
-import talerbackoffice.backoffice
-
-application = talerbackoffice.backoffice.app
diff --git a/bootstrap b/bootstrap
deleted file mode 100755
index 373e5f5..0000000
--- a/bootstrap
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if ! git --version >/dev/null; then
- echo "git not installed"
- exit 1
-fi
-
-echo "$0: Updating submodules"
-echo | git submodule update --init
-
-echo "$0: Running autoreconf"
-autoreconf -if
diff --git a/configure b/configure
new file mode 100755
index 0000000..469bad7
--- /dev/null
+++ b/configure
@@ -0,0 +1,87 @@
+#!/usr/bin/env bash
+
+set -eu
+
+usage() {
+ echo "Usage: ./configure [OPTION]"
+ echo
+ echo "Configuration:"
+ echo " -h, --help display this help and exit"
+ echo
+ echo "Installation directories:"
+ echo " --destination=[local|global] install Python package locally or globally"
+}
+
+
+# -allow a command to fail with !’s side effect on errexit
+# -use return value from ${PIPESTATUS[0]}, because ! hosed $?
+! getopt --test > /dev/null
+if [[ ${PIPESTATUS[0]} -ne 4 ]]; then
+ echo 'getopt not available'
+ exit 1
+fi
+
+LONGOPTS=destination:,help
+OPTIONS=h
+
+! PARSED=$(getopt --options=$OPTIONS --longoptions=$LONGOPTS --name "$0" -- "$@")
+if [[ ${PIPESTATUS[0]} -ne 0 ]]; then
+ # e.g. return value is 1
+ # then getopt has complained about wrong arguments to stdout
+ exit 2
+fi
+
+# read getopt’s output this way to handle the quoting right:
+eval set -- "$PARSED"
+
+destination="local"
+
+while true; do
+ case "$1" in
+ --destination)
+ destination="$2"
+ shift 2
+ ;;
+ -h|--help)
+ usage
+ exit 1
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ echo "Programming error"
+ exit 3
+ ;;
+ esac
+done
+
+case "$destination" in
+ local)
+ install_global=false
+ ;;
+ global)
+ install_global=true
+ ;;
+ *)
+ echo "Destination (--destination) must be 'local' or 'global', paths are not allowed."
+ exit 3
+ ;;
+esac
+
+cat << EOF > config.mk
+# this file is autogenerated by ./configure
+install_global=$install_global
+EOF
+
+
+if ! python3 --version &>/dev/null; then
+ echo 'Error: python3 missing'
+ exit 1
+fi
+
+if ! pip3 --version &>/dev/null; then
+ echo 'Error: pip3 missing'
+ exit 1
+fi
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index 46924a1..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,90 +0,0 @@
-AC_INIT([talerbackoffice], [0.1.0], [taler-bug@gnunet.org])
-
-AC_CONFIG_MACRO_DIR([m4])
-AM_INIT_AUTOMAKE
-AC_PROG_AWK
-AC_PROG_SED
-
-#
-# Check for Python
-#
-
-PC_INIT([3.4])
-pyheaders=0
-PC_PYTHON_CHECK_HEADERS([pyheaders=1])
-PC_PYTHON_CHECK_VERSION()
-
-
-# Get python executable name
-m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python3 python3.4 python3.5 python3.6 python3.7 python])
-AM_PATH_PYTHON([3.4],, [:])
-AC_SUBST([PYTHON])
-AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
-
-#
-# Check for pip3
-# Since it is either pip3 or pip[3.4,3.5,3.6,3.7],
-# we check using python module loading.
-PIP_EXE="$PYTHON -m pip"
-PIP_VERSION=$($PIP_EXE -V | grep -v "No module named" | tr -d '\n' | $AWK '{ print $2 }')
-
-VERSION=$PIP_VERSION
-AC_MSG_RESULT([pip3 version: $VERSION])
-
-AX_COMPARE_VERSION([$VERSION],[lt],[6.0], [AC_MSG_ERROR([Please install pip3>=6.0])])
-
-# On Debian systems, we may need to pass "--system" to pip3 to get
-# to the desired installation target directory
-AC_MSG_CHECKING([for pip3 --system])
-$PIP_EXE install --help | grep '\-\-system' >> /dev/null
-if test $? -ne 0;
-then
- DEBIAN_PIP3_SYSTEM=""
-else
- DEBIAN_PIP3_SYSTEM="--system"
-fi
-AC_SUBST(DEBIAN_PIP3_SYSTEM)
-
-#
-# Check for tsc
-#
-AC_CHECK_PROG([tsc],[tsc],[yes],[no])
-AM_CONDITIONAL([HAVE_TSC], [test "x$tsc" = xyes])
-
-#
-# Check for Yarn
-#
-AC_MSG_CHECKING([Yarn])
-yarn --version &> /dev/null
-if test $? -ne 0;
- then
- AC_MSG_ERROR([Please install Yarn])
-fi
-
-
-#
-# Check for minifier
-#
-AC_MSG_CHECKING([jsmin])
-$PYTHON -m jsmin | grep "No module named" > /dev/null
-if test $? -eq 0;
- then
- AC_MSG_ERROR([Please install Python3 module 'jsmin'])
-fi
-
-#
-# Report
-#
-if test x$pyheaders != x1; then
- AC_MSG_WARN([Python headers not installed, might be required to build uwsgi])
-fi
-
-
-#
-# Finish
-#
-
-AC_CONFIG_FILES([Makefile
- talerbackoffice/backoffice/static/web-common/Makefile])
-
-AC_OUTPUT
diff --git a/m4/ax_compare_version.m4 b/m4/ax_compare_version.m4
deleted file mode 100644
index 74dc0fd..0000000
--- a/m4/ax_compare_version.m4
+++ /dev/null
@@ -1,177 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_compare_version.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
-#
-# DESCRIPTION
-#
-# This macro compares two version strings. Due to the various number of
-# minor-version numbers that can exist, and the fact that string
-# comparisons are not compatible with numeric comparisons, this is not
-# necessarily trivial to do in a autoconf script. This macro makes doing
-# these comparisons easy.
-#
-# The six basic comparisons are available, as well as checking equality
-# limited to a certain number of minor-version levels.
-#
-# The operator OP determines what type of comparison to do, and can be one
-# of:
-#
-# eq - equal (test A == B)
-# ne - not equal (test A != B)
-# le - less than or equal (test A <= B)
-# ge - greater than or equal (test A >= B)
-# lt - less than (test A < B)
-# gt - greater than (test A > B)
-#
-# Additionally, the eq and ne operator can have a number after it to limit
-# the test to that number of minor versions.
-#
-# eq0 - equal up to the length of the shorter version
-# ne0 - not equal up to the length of the shorter version
-# eqN - equal up to N sub-version levels
-# neN - not equal up to N sub-version levels
-#
-# When the condition is true, shell commands ACTION-IF-TRUE are run,
-# otherwise shell commands ACTION-IF-FALSE are run. The environment
-# variable 'ax_compare_version' is always set to either 'true' or 'false'
-# as well.
-#
-# Examples:
-#
-# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8])
-# AX_COMPARE_VERSION([3.15],[lt],[3.15.8])
-#
-# would both be true.
-#
-# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8])
-# AX_COMPARE_VERSION([3.15],[gt],[3.15.8])
-#
-# would both be false.
-#
-# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8])
-#
-# would be true because it is only comparing two minor versions.
-#
-# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15])
-#
-# would be true because it is only comparing the lesser number of minor
-# versions of the two values.
-#
-# Note: The characters that separate the version numbers do not matter. An
-# empty string is the same as version 0. OP is evaluated by autoconf, not
-# configure, so must be a string, not a variable.
-#
-# The author would like to acknowledge Guido Draheim whose advice about
-# the m4_case and m4_ifvaln functions make this macro only include the
-# portions necessary to perform the specific comparison specified by the
-# OP argument in the final configure script.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Tim Toolan <toolan@ele.uri.edu>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 11
-
-dnl #########################################################################
-AC_DEFUN([AX_COMPARE_VERSION], [
- AC_REQUIRE([AC_PROG_AWK])
-
- # Used to indicate true or false condition
- ax_compare_version=false
-
- # Convert the two version strings to be compared into a format that
- # allows a simple string comparison. The end result is that a version
- # string of the form 1.12.5-r617 will be converted to the form
- # 0001001200050617. In other words, each number is zero padded to four
- # digits, and non digits are removed.
- AS_VAR_PUSHDEF([A],[ax_compare_version_A])
- A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
- -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/[[^0-9]]//g'`
-
- AS_VAR_PUSHDEF([B],[ax_compare_version_B])
- B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
- -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/[[^0-9]]//g'`
-
- dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
- dnl # then the first line is used to determine if the condition is true.
- dnl # The sed right after the echo is to remove any indented white space.
- m4_case(m4_tolower($2),
- [lt],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
- ],
- [gt],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
- ],
- [le],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
- ],
- [ge],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
- ],[
- dnl Split the operator from the subversion count if present.
- m4_bmatch(m4_substr($2,2),
- [0],[
- # A count of zero means use the length of the shorter version.
- # Determine the number of characters in A and B.
- ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'`
- ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'`
-
- # Set A to no more than B's length and B to no more than A's length.
- A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
- B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
- ],
- [[0-9]+],[
- # A count greater than zero means use only that many subversions
- A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
- B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
- ],
- [.+],[
- AC_WARNING(
- [illegal OP numeric parameter: $2])
- ],[])
-
- # Pad zeros at end of numbers to make same length.
- ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
- B="$B`echo $A | sed 's/./0/g'`"
- A="$ax_compare_version_tmp_A"
-
- # Check for equality or inequality as necessary.
- m4_case(m4_tolower(m4_substr($2,0,2)),
- [eq],[
- test "x$A" = "x$B" && ax_compare_version=true
- ],
- [ne],[
- test "x$A" != "x$B" && ax_compare_version=true
- ],[
- AC_WARNING([illegal OP parameter: $2])
- ])
- ])
-
- AS_VAR_POPDEF([A])dnl
- AS_VAR_POPDEF([B])dnl
-
- dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
- if test "$ax_compare_version" = "true" ; then
- m4_ifvaln([$4],[$4],[:])dnl
- m4_ifvaln([$5],[else $5])dnl
- fi
-]) dnl AX_COMPARE_VERSION
diff --git a/m4/python.m4 b/m4/python.m4
deleted file mode 100644
index 98a68b8..0000000
--- a/m4/python.m4
+++ /dev/null
@@ -1,646 +0,0 @@
-# Copyright 2012, 2013, 2014 Brandon Invergo <brandon@invergo.net>
-#
-# This file is part of pyconfigure. This program is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# Under Section 7 of GPL version 3, you are granted additional
-# permissions described in the Autoconf Configure Script Exception,
-# version 3.0, as published by the Free Software Foundation.
-#
-# You should have received a copy of the GNU General Public License
-# and a copy of the Autoconf Configure Script Exception along with
-# this program; see the files COPYINGv3 and COPYING.EXCEPTION
-# respectively. If not, see <http://www.gnu.org/licenses/>.
-
-
-# Many of these macros were adapted from ones written by Andrew Dalke
-# and James Henstridge and are included with the Automake utility
-# under the following copyright terms:
-#
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# Table of Contents:
-#
-# 1. Language selection
-# and routines to produce programs in a given language.
-#
-# 2. Producing programs in a given language.
-#
-# 3. Looking for a compiler
-# And possibly the associated preprocessor.
-#
-# 4. Looking for specific libs & functionality
-
-
-## ----------------------- ##
-## 1. Language selection. ##
-## ----------------------- ##
-
-
-# AC_LANG(Python)
-# ---------------
-AC_LANG_DEFINE([Python], [py], [PY], [PYTHON], [],
-[ac_ext=py
-ac_compile='chmod +x conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
-ac_link='chmod +x conftest.$ac_ext && cp conftest.$ac_ext conftest >&AS_MESSAGE_LOG_FD'
-])
-
-
-# AC_LANG_PYTHON
-# --------------
-AU_DEFUN([AC_LANG_PYTHON], [AC_LANG(Python)])
-
-
-## ----------------------- ##
-## 2. Producing programs. ##
-## ----------------------- ##
-
-
-# AC_LANG_PROGRAM(Python)([PROLOGUE], [BODY])
-# -------------------------------------------
-m4_define([AC_LANG_PROGRAM(Python)], [dnl
-@%:@!$PYTHON
-$1
-m4_if([$2], [], [], [dnl
-if __name__ == '__main__':
-$2])])
-
-
-# _AC_LANG_IO_PROGRAM(Python)
-# ---------------------------
-# Produce source that performs I/O.
-m4_define([_AC_LANG_IO_PROGRAM(Python)],
-[AC_LANG_PROGRAM([dnl
-import sys
-try:
- h = open('conftest.out')
-except:
- sys.exit(1)
-else:
- close(h)
- sys.exit(0)
-], [])])
-
-
-# _AC_LANG_CALL(Python)([PROLOGUE], [FUNCTION])
-# ---------------------
-# Produce source that calls FUNCTION
-m4_define([_AC_LANG_CALL(Python)],
-[AC_LANG_PROGRAM([$1], [$2])])
-
-
-## -------------------------------------------- ##
-## 3. Looking for Compilers and Interpreters. ##
-## -------------------------------------------- ##
-
-
-AC_DEFUN([AC_LANG_COMPILER(Python)],
-[AC_REQUIRE([PC_PROG_PYTHON])])
-
-
-# PC_INIT([MIN-VERSION], [MAX-VERSION])
-# -----------------------------
-# Initialize pyconfigure, finding a Python interpreter with a given
-# minimum and/or maximum version.
-AC_DEFUN([PC_INIT],
-[PC_PROG_PYTHON([], [$1], [$2])
-dnl If we found something, do a sanity check that the interpreter really
-dnl has the version its name would suggest.
-m4_ifval([PYTHON],
- [PC_PYTHON_VERIFY_VERSION([>=], [pc_min_ver], [],
- [AC_MSG_FAILURE([No compatible Python interpreter found. If you're sure that you have one, try setting the PYTHON environment variable to the location of the interpreter.])])])
-m4_ifval([PYTHON],
- [PC_PYTHON_VERIFY_VERSION([<=], [pc_max_ver], [],
- [AC_MSG_FAILURE([No compatible Python interpreter found. If you're sure that you have one, try setting the PYTHON environment variable to the location of the interpreter.])])])
-])# PC_INIT
-
-# PC_PROG_PYTHON([PROG-TO-CHECK-FOR], [MIN-VERSION], [MAX-VERSION])
-# ---------------------------------
-# Find a Python interpreter. Python versions prior to 2.0 are not
-# supported. (2.0 was released on October 16, 2000).
-AC_DEFUN_ONCE([PC_PROG_PYTHON],
-[AC_ARG_VAR([PYTHON], [the Python interpreter])
-dnl The default minimum version is 2.0
-m4_define_default([pc_min_ver], m4_ifval([$2], [$2], [2.0]))
-dnl The default maximum version is 3.3
-m4_define_default([pc_max_ver], m4_ifval([$3], [$3], [4.0]))
-dnl Build up a list of possible interpreter names.
-m4_define_default([_PC_PYTHON_INTERPRETER_LIST],
- [dnl If we want some Python 3 versions (max version >= 3.0),
-dnl also search for "python3"
- m4_if(m4_version_compare(pc_max_ver, [2.9]), [1], [python3], []) \
-dnl If we want some Python 2 versions (min version <= 2.7),
-dnl also search for "python2".
- m4_if(m4_version_compare(pc_min_ver, [2.8]), [-1], [python2], []) \
-dnl Construct a comma-separated list of interpreter names (python2.6,
-dnl python2.7, etc). We only care about the first 3 characters of the
-dnl version strings (major-dot-minor; not
-dnl major-dot-minor-dot-bugfix[-dot-whatever])
- m4_foreach([pc_ver],
- m4_esyscmd_s(seq -s[[", "]] -f["[[%.1f]]"] m4_substr(pc_max_ver, [0], [3]) -0.1 m4_substr(pc_min_ver, [0], [3])),
-dnl Remove python2.8 and python2.9 since they will never exist
- [m4_bmatch(pc_ver, [2.[89]], [], [python]pc_ver)]) \
- [python]])
-dnl Do the actual search at last.
-m4_ifval([$1],
- [AC_PATH_PROGS(PYTHON, [$1 _PC_PYTHON_INTERPRETER_LIST])],
- [AC_PATH_PROGS(PYTHON, [_PC_PYTHON_INTERPRETER_LIST])])
-])# PC_PROG_PYTHON
-
-
-# PC_PYTHON_PROG_PYTHON_CONFIG(PROG-TO-CHECK-FOR)
-# ----------------------------------------------
-# Find the python-config program
-AC_DEFUN([PC_PYTHON_PROG_PYTHON_CONFIG],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-AC_ARG_VAR([PYTHON_CONFIG], [the Python-config program])
-dnl python-config's binary name is normally based on the Python interpreter's
-dnl binary name (i.e. python2.7 -> python2.7-config)
-m4_define([_PYTHON_BASENAME], [`basename $PYTHON`])
-m4_ifval([$1],
- [AC_PATH_PROGS(PYTHON_CONFIG, [$1 _PYTHON_BASENAME-config])],
- [AC_PATH_PROG(PYTHON_CONFIG, _PYTHON_BASENAME-config)])
-]) # PC_PYTHON_PROG_PYTHON_CONFIG
-
-
-# PC_PYTHON_VERIFY_VERSION([RELATION], [VERSION], [ACTION-IF-TRUE], [ACTION-IF-FALSE])
-# ---------------------------------------------------------------------------
-# Run ACTION-IF-TRUE if the Python interpreter PROG has version [RELATION] VERSION.
-# i.e if RELATION is "<", check if PROG has a version number less than VERSION.
-# Run ACTION-IF-FALSE otherwise.
-# Specify RELATION as any mathematical comparison "<", ">", "<=", ">=", "==" or "!="
-# This test uses sys.hexversion instead of the string equivalent (first
-# word of sys.version), in order to cope with versions such as 2.2c1.
-# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
-AC_DEFUN([PC_PYTHON_VERIFY_VERSION],
-[m4_define([pc_python_safe_ver], m4_bpatsubsts($2, [\.], [_]))
-AC_CACHE_CHECK([if Python $1 '$2'],
- [[pc_cv_python_req_version_]pc_python_safe_ver],
- [AC_LANG_PUSH(Python)[]dnl
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
- # split strings by '.' and convert to numeric. Append some zeros
- # because we need at least 4 digits for the hex conversion.
- # map returns an iterator in Python 3.0 and a list in 2.x
- reqver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
- reqverhex = 0
- # xrange is not present in Python 3.0 and range returns an iterator
- for i in list(range(4)):
- reqverhex = (reqverhex << 8) + reqver[[i]]
- # the final 8 bits are "0xf0" for final versions, which are all
- # we'll test against, since it's doubtful that a released software
- # will depend on an alpha- or beta-state Python.
- reqverhex += 0xf0
- if sys.hexversion $1 reqverhex:
- sys.exit()
- else:
- sys.exit(1)
-])],
- [[pc_cv_python_req_version_]pc_python_safe_ver=yes],
- [[pc_cv_python_req_version_]pc_python_safe_ver=no])
- AC_LANG_POP(Python)[]dnl
- ])
-AS_IF([test "$[pc_cv_python_req_version_]pc_python_safe_ver" = "no"], [$4], [$3])
-])# PC_PYTHON_VERIFY_VERSION
-
-
-# PC_PYTHON_CHECK_VERSION
-# -----------------------
-# Query Python for its version number. Getting [:3] seems to be
-# the best way to do this; it's what "site.py" does in the standard
-# library.
-AC_DEFUN([PC_PYTHON_CHECK_VERSION],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-AC_CACHE_CHECK([for $1 version],
- [pc_cv_python_version],
- [AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
- sys.stdout.write(sys.version[[:3]])
-])],
- [pc_cv_python_version=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- ])
-AC_SUBST([PYTHON_VERSION], [$pc_cv_python_version])
-])# PC_PYTHON_CHECK_VERSION
-
-
-# PC_PYTHON_CHECK_PREFIX
-# ----------------------
-# Use the value of $prefix for the corresponding value of
-# PYTHON_PREFIX. This is made a distinct variable so it can be
-# overridden if need be. However, general consensus is that you
-# shouldn't need this ability.
-AC_DEFUN([PC_PYTHON_CHECK_PREFIX],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to get it with python-config otherwise do it from within Python
-AC_CACHE_CHECK([for Python prefix], [pc_cv_python_prefix],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_prefix=`$PYTHON_CONFIG --prefix 2>&AS_MESSAGE_LOG_FD`
-else
- AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
- sys.stdout.write(sys.prefix)
-])], [pc_cv_python_prefix=`./conftest`;
- if test $? != 0; then
- AC_MSG_FAILURE([could not determine Python prefix])
- fi],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
-fi])
-AC_SUBST([PYTHON_PREFIX], [$pc_cv_python_prefix])])
-
-
-# PC_PYTHON_CHECK_EXEC_PREFIX
-# --------------------------
-# Like above, but for $exec_prefix
-AC_DEFUN([PC_PYTHON_CHECK_EXEC_PREFIX],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to get it with python-config otherwise do it from within Python
-AC_CACHE_CHECK([for Python exec-prefix], [pc_cv_python_exec_prefix],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_exec_prefix=`$PYTHON_CONFIG --exec-prefix 2>&AS_MESSAGE_LOG_FD`
-else
- AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
- sys.stdout.write(sys.exec_prefix)
-])],
- [pc_cv_python_exec_prefix=`./conftest`;
- if test $? != 0; then
- AC_MSG_FAILURE([could not determine Python exec_prefix])
- fi],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
-fi
-])
-AC_SUBST([PYTHON_EXEC_PREFIX], [$pc_cv_python_exec_prefix])])
-
-
-# PC_PYTHON_CHECK_INCLUDES
-# ------------------------
-# Find the Python header file include flags (ie
-# '-I/usr/include/python')
-AC_DEFUN([PC_PYTHON_CHECK_INCLUDES],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the headers location with python-config otherwise guess
-AC_CACHE_CHECK([for Python includes], [pc_cv_python_includes],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_includes=`$PYTHON_CONFIG --includes 2>&AS_MESSAGE_LOG_FD`
-else
- pc_cv_python_includes="[-I$includedir/$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS,
- PYTHON_ABI_FLAGS,)"
-fi
-])
-AC_SUBST([PYTHON_INCLUDES], [$pc_cv_python_includes])])
-
-
-# PC_PYTHON_CHECK_HEADERS([ACTION-IF-PRESENT], [ACTION-IF-ABSENT])
-# -----------------------
-# Check for the presence and usability of Python.h
-AC_DEFUN([PC_PYTHON_CHECK_HEADERS],
-[AC_REQUIRE([PC_PYTHON_CHECK_INCLUDES])[]dnl
-pc_cflags_store=$CPPFLAGS
-CPPFLAGS="$CFLAGS $PYTHON_INCLUDES"
-AC_CHECK_HEADER([Python.h], [$1], [$2])
-CPPFLAGS=$pc_cflags_store
-])
-
-
-# PC_PYTHON_CHECK_LIBS
-# --------------------
-# Find the Python lib flags (ie '-lpython')
-AC_DEFUN([PC_PYTHON_CHECK_LIBS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the lib flags with python-config otherwise guess
-AC_CACHE_CHECK([for Python libs], [pc_cv_python_libs],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_libs=`$PYTHON_CONFIG --libs 2>&AS_MESSAGE_LOG_FD`
-else
- pc_cv_python_libs="[-l$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS, PYTHON_ABI_FLAGS,)"
-fi
-])
-AC_SUBST([PYTHON_LIBS], [$pc_cv_python_libs])])
-
-
-# PC_PYTHON_TEST_LIBS(LIBRARY-FUNCTION, [ACTION-IF-PRESENT], [ACTION-IF-ABSENT])
-# -------------------
-# Verify that the Python libs can be loaded
-AC_DEFUN([PC_PYTHON_TEST_LIBS],
-[AC_REQUIRE([PC_PYTHON_CHECK_LIBS])[]dnl
-pc_libflags_store=$LIBS
-for lflag in $PYTHON_LIBS; do
- case $lflag in
- -lpython*@:}@
- LIBS="$LIBS $lflag"
- pc_libpython=`echo $lflag | sed -e 's/^-l//'`
- ;;
- *@:}@;;
- esac
-done
-AC_CHECK_LIB([$pc_libpython], [$1], [$2], [$3])])
-
-
-# PC_PYTHON_CHECK_CFLAGS
-# ----------------------
-# Find the Python CFLAGS
-AC_DEFUN([PC_PYTHON_CHECK_CFLAGS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the CFLAGS with python-config otherwise give up
-AC_CACHE_CHECK([for Python CFLAGS], [pc_cv_python_cflags],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_cflags=`$PYTHON_CONFIG --cflags 2>&AS_MESSAGE_LOG_FD`
-else
- pc_cv_python_cflags=
-fi
-])
-AC_SUBST([PYTHON_CFLAGS], [$pc_cv_python_cflags])])
-
-
-# PC_PYTHON_CHECK_LDFLAGS
-# -----------------------
-# Find the Python LDFLAGS
-AC_DEFUN([PC_PYTHON_CHECK_LDFLAGS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the LDFLAGS with python-config otherwise give up
-AC_CACHE_CHECK([for Python LDFLAGS], [pc_cv_python_ldflags],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_ldflags=`$PYTHON_CONFIG --ldflags 2>&AS_MESSAGE_LOG_FD`
-else
- pc_cv_python_ldflags=
-fi
-])
-AC_SUBST([PYTHON_LDFLAGS], [$pc_cv_python_ldflags])])
-
-
-# PC_PYTHON_CHECK_EXTENSION_SUFFIX
-# --------------------------------
-# Find the Python extension suffix (i.e. '.cpython-32.so')
-AC_DEFUN([PC_PYTHON_CHECK_EXTENSION_SUFFIX],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the suffix with python-config otherwise give up
-AC_CACHE_CHECK([for Python extension suffix], [pc_cv_python_extension_suffix],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_extension_suffix=`$PYTHON_CONFIG --extension-suffix 2>&AS_MESSAGE_LOG_FD`
-else
- pc_cv_python_extension_suffix=
-fi
-])
-AC_SUBST([PYTHON_EXTENSION_SUFFIX], [$pc_cv_python_extension_suffix])])
-
-
-# PC_PYTHON_CHECK_ABI_FLAGS
-# -------------------------
-# Find the Python ABI flags
-AC_DEFUN([PC_PYTHON_CHECK_ABI_FLAGS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the ABI flags with python-config otherwise give up
-AC_CACHE_CHECK([for Python ABI flags], [pc_cv_python_abi_flags],
-[if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_abi_flags=`$PYTHON_CONFIG --abiflags 2>&AS_MESSAGE_LOG_FD`
-else
- pc_cv_python_abi_flags=
-fi
-])
-AC_SUBST([PYTHON_ABI_FLAGS], [$pc_cv_python_abi_flags])])
-
-
-# PC_PYTHON_CHECK_PLATFORM
-# ------------------------
-# At times (like when building shared libraries) you may want
-# to know which OS platform Python thinks this is.
-AC_DEFUN([PC_PYTHON_CHECK_PLATFORM],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-dnl Get the platform from within Python (sys.platform)
-AC_CACHE_CHECK([for Python platform], [pc_cv_python_platform],
- [AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
- sys.stdout.write(sys.platform)
-])], [pc_cv_python_platform=`./conftest`;
- if test $? != 0; then
- AC_MSG_FAILURE([could not determine Python platform])
- fi],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- ])
-AC_SUBST([PYTHON_PLATFORM], [$pc_cv_python_platform])
-])
-
-
-# PC_PYTHON_CHECK_SITE_DIR
-# ---------------------
-# The directory to which new libraries are installed (i.e. the
-# "site-packages" directory.
-AC_DEFUN([PC_PYTHON_CHECK_SITE_DIR],
-[AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_PREFIX])[]dnl
-AC_CACHE_CHECK([for Python site-packages directory],
- [pc_cv_python_site_dir],
- [AC_LANG_PUSH(Python)[]dnl
- if test "x$prefix" = xNONE
- then
- pc_py_prefix=$ac_default_prefix
- else
- pc_py_prefix=$prefix
- fi
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-from platform import python_implementation
-# sysconfig in CPython 2.7 doesn't work in virtualenv
-# <https://github.com/pypa/virtualenv/issues/118>
-try:
- import sysconfig
-except:
- can_use_sysconfig = False
-else:
- can_use_sysconfig = True
-if can_use_sysconfig:
- if python_implementation() == "CPython" and sys.version[[:3]] == '2.7':
- can_use_sysconfig = False
-if not can_use_sysconfig:
- from distutils import sysconfig
- sitedir = sysconfig.get_python_lib(False, False, prefix='$pc_py_prefix')
-else:
- sitedir = sysconfig.get_path('purelib', vars={'base':'$pc_py_prefix'})
-], [dnl
- sys.stdout.write(sitedir)
-])], [pc_cv_python_site_dir=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- case $pc_cv_python_site_dir in
- $pc_py_prefix*)
- pc__strip_prefix=`echo "$pc_py_prefix" | sed 's|.|.|g'`
- pc_cv_python_site_dir=`echo "$pc_cv_python_site_dir" | sed "s,^$pc__strip_prefix/,,"`
- ;;
- *)
- case $pc_py_prefix in
- /usr|/System*) ;;
- *)
- pc_cv_python_site_dir=lib/python$PYTHON_VERSION/site-packages
- ;;
- esac
- ;;
- esac
- ])
-AC_SUBST([pythondir], [\${prefix}/$pc_cv_python_site_dir])])# PC_PYTHON_CHECK_SITE_DIR
-
-# PC_PYTHON_SITE_PACKAGE_DIR
-# --------------------------
-# $PACKAGE directory under PYTHON_SITE_DIR
-AC_DEFUN([PC_PYTHON_SITE_PACKAGE_DIR],
-[AC_REQUIRE([PC_PYTHON_CHECK_SITE_DIR])[]dnl
-AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE_NAME])])
-
-
-# PC_PYTHON_CHECK_EXEC_DIR
-# ------------------------
-# directory for installing python extension modules (shared libraries)
-AC_DEFUN([PC_PYTHON_CHECK_EXEC_DIR],
-[AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_EXEC_PREFIX])[]dnl
- AC_CACHE_CHECK([for Python extension module directory],
- [pc_cv_python_exec_dir],
- [AC_LANG_PUSH(Python)[]dnl
- if test "x$pc_cv_python_exec_prefix" = xNONE
- then
- pc_py_exec_prefix=$pc_cv_python_prefix
- else
- pc_py_exec_prefix=$pc_cv_python_exec_prefix
- fi
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-from platform import python_implementation
-# sysconfig in CPython 2.7 doesn't work in virtualenv
-# <https://github.com/pypa/virtualenv/issues/118>
-try:
- import sysconfig
-except:
- can_use_sysconfig = False
-else:
- can_use_sysconfig = True
-if can_use_sysconfig:
- if python_implementation() == "CPython" and sys.version[[:3]] == '2.7':
- can_use_sysconfig = False
-if not can_use_sysconfig:
- from distutils import sysconfig
- sitedir = sysconfig.get_python_lib(False, False, prefix='$pc_py__exec_prefix')
-else:
- sitedir = sysconfig.get_path('purelib', vars={'platbase':'$pc_py_exec_prefix'})
-], [dnl
- sys.stdout.write(sitedir)
-])], [pc_cv_python_exec_dir=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- case $pc_cv_python_exec_dir in
- $pc_py_exec_prefix*)
- pc__strip_prefix=`echo "$pc_py_exec_prefix" | sed 's|.|.|g'`
- pc_cv_python_exec_dir=`echo "$pc_cv_python_exec_dir" | sed "s,^$pc__strip_prefix/,,"`
- ;;
- *)
- case $pc_py_exec_prefix in
- /usr|/System*) ;;
- *)
- pc_cv_python_exec_dir=lib/python$PYTHON_VERSION/site-packages
- ;;
- esac
- ;;
- esac
- ])
-AC_SUBST([pyexecdir], [\${exec_prefix}/$pc_cv_python_pyexecdir])]) #PY_PYTHON_CHECK_EXEC_LIB_DIR
-
-
-# PC_PYTHON_EXEC_PACKAGE_DIR
-# --------------------------
-# $PACKAGE directory under PYTHON_SITE_DIR
-AC_DEFUN([PC_PYTHON_EXEC_PACKAGE_DIR],
-[AC_REQUIRE([PC_PYTHON_CHECK_EXEC_DIR])[]dnl
-AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE_NAME])])
-
-
-## -------------------------------------------- ##
-## 4. Looking for specific libs & functionality ##
-## -------------------------------------------- ##
-
-
-# PC_PYTHON_CHECK_MODULE(LIBRARY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-# ----------------------------------------------------------------------
-# Macro for checking if a Python library is installed
-AC_DEFUN([PC_PYTHON_CHECK_MODULE],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
-AC_CACHE_CHECK([for Python '$1' library],
- [[pc_cv_python_module_]pc_python_safe_mod],
- [AC_LANG_PUSH(Python)[]dnl
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM([dnl
-import sys
-try:
- import $1
-except:
- sys.exit(1)
-else:
- sys.exit(0)
-], [])],
- [[pc_cv_python_module_]pc_python_safe_mod="yes"],
- [[pc_cv_python_module_]pc_python_safe_mod="no"])
- AC_LANG_POP(Python)[]dnl
- ])
-AS_IF([test "$[pc_cv_python_module_]pc_python_safe_mod" = "no"], [$3], [$2])
-])# PC_PYTHON_CHECK_MODULE
-
-
-# PC_PYTHON_CHECK_FUNC([LIBRARY], FUNCTION, ARGS, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-# ---------------------------------------------------------------------------------------
-# Check to see if a given function call, optionally from a module, can
-# be successfully called
-AC_DEFUN([PC_PYTHON_CHECK_FUNC],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
-AC_CACHE_CHECK([for Python m4_ifnblank($1, '$1.$2()', '$2()') function],
- [[pc_cv_python_func_]pc_python_safe_mod[_$2]],
- [AC_LANG_PUSH(Python)[]dnl
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM([dnl
-import sys
-m4_ifnblank([$1], [dnl
-try:
- import $1
-except:
- sys.exit(1)
-], [])],
-[
-m4_ifnblank([$1], [
- try:
- $1.$2($3)], [
- try:
- $2($3)])
- except:
- sys.exit(1)
- else:
- sys.exit(0)
-])],
- [[pc_cv_python_func_]pc_python_safe_mod[_$2]="yes"],
- [[pc_cv_python_func_]pc_python_safe_mod[_$2]="no"])
- AC_LANG_POP(Python)[]dnl
- ])
-AS_IF([test "$[pc_cv_python_func_]pc_python_safe_mod[_$2]" = "no"], [$5], [$4])
-])# PC_PYTHON_CHECK_FUNC
diff --git a/setup.py b/setup.py
index d5bf4c3..0a17d21 100755
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
setup(name='talerbackoffice',
- version='0.0',
+ version='0.6.0pre1',
description='Back-office site for GNU Taler',
url='git://taler.net/backoffice',
author='Marcello Stanisci',
@@ -34,5 +34,5 @@ setup(name='talerbackoffice',
"backoffice/static/web-common/*.html"
]
},
- scripts=['taler-merchant-backoffice'],
+ scripts=['./bin/taler-merchant-backoffice'],
zip_safe=False)
diff --git a/taler-merchant-backoffice.in b/taler-merchant-backoffice.in
deleted file mode 100644
index eed11f3..0000000
--- a/taler-merchant-backoffice.in
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python3
-
-"""
-Stand-alone script to manage the GNU Taler backoffice.
-"""
-
-import logging
-import argparse
-import sys
-import os
-import site
-from talerbackoffice.talerconfig import TalerConfig
-
-
-os.environ.setdefault("TALER_PREFIX", "@prefix@")
-site.addsitedir("%s/lib/python%d.%d/site-packages" % (
- "@prefix@",
- sys.version_info.major,
- sys.version_info.minor))
-
-LOGGER = logging.getLogger(__name__)
-
-# No perfect match to our logging format, but good enough ...
-UWSGI_LOGFMT = "%(ltime) %(proto) %(method) %(uri) %(proto) => %(status)"
-
-def handle_serve_http(args):
- TC = TalerConfig.from_file(os.environ.get("TALER_CONFIG_FILE"))
- port = args.port
- if port is None:
- port = TC["backoffice-%s" % args.frontend]["http_port"].value_int(required=True)
- spec = ":%d" % (port)
- os.execlp("uwsgi", "uwsgi",
- "--master",
- "--die-on-term",
- "--log-format", UWSGI_LOGFMT,
- "--http", spec,
- "--wsgi-file", "@prefix@/share/taler/backoffice.wsgi",
- "--env", "BACKOFFICE_BACKEND=%s" % TC["backoffice-%s" % args.frontend]["backend"].value_string(required=True),
- "--env", "BACKOFFICE_INSTANCES=%s" % TC["backoffice-%s" % args.frontend]["instances"].value_string(required=True))
-
-def handle_serve_uwsgi(args):
- TC = TalerConfig.from_file(os.environ.get("TALER_CONFIG_FILE"))
- serve_uwsgi = TC["backoffice-%s" % args.frontend]["uwsgi_serve"].value_string(required=True).lower()
- params = ["uwsgi", "uwsgi",
- "--master",
- "--die-on-term",
- "--log-format", UWSGI_LOGFMT,
- "--wsgi-file", "@prefix@/share/taler/backoffice.wsgi",
- "--env", "BACKOFFICE_BACKEND=%s" % TC["backoffice-%s" % args.frontend]["backend"].value_string(required=True),
- "--env", "BACKOFFICE_INSTANCES=%s" % TC["backoffice-%s" % args.frontend]["instances"].value_string(required=True)]
- if serve_uwsgi == "tcp":
- port = TC["backoffice-%s" % args.frontend]["uwsgi_port"].value_int(required=True)
- spec = ":%d" % (port,)
- params.extend(["--socket", spec])
- elif serve_uwsgi == "unix":
- spec = TC["backoffice-%s" % args.frontend]["uwsgi_unixpath"].value_filename(required=True)
- mode = TC["backoffice-%s" % args.frontend]["uwsgi_unixpath_mode"].value_filename(required=True)
- params.extend(["--socket", spec])
- params.extend(["--chmod-socket="+mode])
- os.makedirs(os.path.dirname(spec), exist_ok=True)
- logging.info("launching uwsgi with argv %s", params[1:])
- os.execlp(*params)
-
-
-PARSER = argparse.ArgumentParser()
-PARSER.set_defaults(func=None)
-PARSER.add_argument('--config', '-c',
- help="configuration file to use",
- metavar="CONFIG", type=str,
- dest="config", default=None)
-PARSER.add_argument('--frontend', '-f',
- help="fetch config values from [backoffice-<FRONTEND>] section",
- metavar="FRONTEND", type=str,
- dest="frontend", required=True)
-SUB = PARSER.add_subparsers()
-
-P = SUB.add_parser('serve-http', help="Serve over HTTP")
-P.add_argument("--port", "-p", dest="port",
- type=int, default=None, metavar="PORT")
-P.set_defaults(func=handle_serve_http)
-
-P = SUB.add_parser('serve-uwsgi', help="Serve over UWSGI")
-P.set_defaults(func=handle_serve_uwsgi)
-
-ARGS = PARSER.parse_args()
-if getattr(ARGS, 'func', None) is None:
- PARSER.print_help()
- sys.exit(1)
-
-if ARGS.config is not None:
- os.environ["TALER_CONFIG_FILE"] = ARGS.config
-
-ARGS.func(ARGS)