diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-01-14 17:39:32 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-01-20 11:20:25 +0000 |
| commit | 3f630fb8334238ab8a58fbe1a0f513ae2c00de80 (patch) | |
| tree | 4b773b91029d6374bfd4f2194053d3e249d597cd /asdcplib/m4/az_python.m4 | |
| parent | 49cafda01b3e07c47e3b20dd5ee91e1426446aea (diff) | |
Simplify time representation; better in-tree DCP subtitle parser.
Diffstat (limited to 'asdcplib/m4/az_python.m4')
| -rw-r--r-- | asdcplib/m4/az_python.m4 | 533 |
1 files changed, 533 insertions, 0 deletions
diff --git a/asdcplib/m4/az_python.m4 b/asdcplib/m4/az_python.m4 new file mode 100644 index 0000000..7133a8a --- /dev/null +++ b/asdcplib/m4/az_python.m4 @@ -0,0 +1,533 @@ +##### http://autoconf-archive.cryp.to/az_python.html +# +# SYNOPSIS +# +# AZ_PYTHON_DEFAULT +# AZ_PYTHON_ENABLE +# AZ_PYTHON_WITH +# AZ_PYTHON_PATH +# AZ_PYTHON_VERSION_ENSURE( [2.2] ) +# AZ_PYTHON_CSPEC +# AZ_PYTHON_LSPEC +# +# DESCRIPTION +# +# This file provides autoconf support for those applications that +# want to embed python. It supports all pythons >= 2.2 which is the +# first official release containing distutils. Version 2.2 of python +# was released December 21, 2001. Since it actually executes the +# python, cross platform configuration will probably not work. Also, +# most of the platforms supported are consistent until you look into +# MacOSX. The python included with it is installed as a framework +# which is a very different environment to set up the normal tools +# such as gcc and libtool to deal with. Therefore, once we establish +# which python that we are going to use, we use its distutils to +# actually compile and link our modules or applications. +# +# At this time, it does NOT support linking with Python statically. +# It does support dynamic linking. +# +# This set of macros help define $PYTHON, $PYTHON_USE, $PYTHON_CSPEC +# and $PYTHON_LSPEC. $PYTHON defines the full executable path for the +# Python being linked to and is used within these macros to determine +# if that has been specified or found. These macros do execute this +# python version so it must be present on the system at configure +# time. +# +# $PYTHON_USE is an automake variable that defines whether Python +# support should be included or not in your application. +# $PYTHON_CSPEC is a variable that supplies additional CFLAGS for the +# compilation of the application/shared library. $PYTHON_LSPEC is a +# variable that supplies additional LDFLAGS for linking the +# application/shared library. +# +# The following is an example of how to set up for python usage +# within your application in your configure.in: +# +# AZ_PYTHON_DEFAULT( ) +# AZ_PYTHON_ENABLE( ) # Optional +# AZ_PYTHON_WITH( ) # Optional +# AZ_PYTHON_PATH( ) # or AZ_PYTHON_INSIST( ) +# # if $PYTHON is not defined, then the following do nothing. +# AZ_PYTHON_VERSION_ENSURE( [2.2] ) +# AZ_PYTHON_CSPEC +# AZ_PYTHON_LSPEC +# +# The AZ_PYTHON_DEFAULT sets the $PYTHON_USE to false. Thereby, +# excluding it if it was optional. +# +# The AZ_PYTHON_ENABLE looks for the optional configure parameters of +# --enable-python/--disable-python and establishes the $PYTHON and +# $PYTHON_USE variables accordingly. +# +# The AZ_PYTHON_WITH looks for the optional configure parameters of +# --with-python/--without-python and establishes the $PYTHON and +# $PYTHON_USE variables accordingly. +# +# The AZ_PYTHON_PATH looks for python assuming that none has been +# previously found or defined and issues an error if it does not find +# it. If it does find it, it establishes the $PYTHON and $PYTHON_USE +# variables accordingly. AZ_PYTHON_INSIST could be used here instead +# if you want to insist that Python support be included using the +# --enable-python or --with-python checks previously done. +# +# The AZ_PYTHON_VERSION_ENSURE issues an error if the Python +# previously found is not of version 2.2 or greater. +# +# Once that these macros have be run, we can use PYTHON_USE within +# the makefile.am file to conditionally add the Python support such +# as: +# +# Makefile.am example showing optional inclusion of directories: +# +# if PYTHON_USE +# plugins = plugins +# src = src +# else +# plugins = +# src = +# endif +# +# SUBDIRS = . $(plugins) $(src) +# +# Makefile.am example showing optional shared library build: +# +# if PYTHON_USE +# lib_LTLIBRARIES = libElemList.la +# libElemList_la_SOURCES = libElemList.c +# libElemList_la_CFLAGS = @PYTHON_CSPEC@ +# libElemList_la_LDFLAGS = @PYTHON_LSPEC@ +# endif +# +# Makefile.am example showing optional program build: +# +# if PYTHON_USE +# bin_PROGRAMS = runFunc +# runFunc_SOURCES = runFunc.c +# runFunc_CFLAGS = @PYTHON_CSPEC@ +# runFunc_LDFLAGS = @PYTHON_LSPEC@ +# endif +# +# The above compiles the modules only if PYTHON_USE was specified as +# true. Also, the else portion of the if was optional. +# +# LAST MODIFICATION +# +# 2007-08-04 +# +# COPYLEFT +# +# Copyright (c) 2007 Robert White <kranki@mac.com> +# Copyright (c) 2007 Dustin J. Mitchell <dustin@cs.uchicago.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. + +# AZ_PYTHON_DEFAULT( ) +# ----------------- +# Sets the default to not include Python support. + +AC_DEFUN([AZ_PYTHON_DEFAULT], +[ + az_python_use=false + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") +]) + + + +# AZ_PYTHON_ENABLE( [path] ) +# ----------------------------------------------------------------- +# Handles the various --enable-python commands. +# Input: +# $1 is the optional search path for the python executable if needed +# Ouput: +# PYTHON_USE (AM_CONDITIONAL) is true if python executable found +# and --enable-python was requested; otherwise false. +# $PYTHON contains the full executable path to python if PYTHON_ENABLE_USE +# is true. +# +# Example: +# AZ_PYTHON_ENABLE( ) +# or +# AZ_PYTHON_ENABLE( "/usr/bin" ) + +AC_DEFUN([AZ_PYTHON_ENABLE], +[ + AC_ARG_VAR([PYTHON],[Python Executable Path]) + + # unless PYTHON was supplied to us (as a precious variable), + # see if --enable-python[=PythonExecutablePath], --enable-python, + # --disable-python or --enable-python=no was given. + if test -z "$PYTHON" + then + AC_MSG_CHECKING(for --enable-python) + AC_ARG_ENABLE( + python, + AC_HELP_STRING([--enable-python@<:@=PYTHON@:>@], + [absolute path name of Python executable] + ), + [ + if test "$enableval" = "yes" + then + # "yes" was specified, but we don't have a path + # for the executable. + # So, let's searth the PATH Environment Variable. + AC_MSG_RESULT(yes) + AC_PATH_PROG( + [PYTHON], + python, + [], + $1 + ) + if test -z "$PYTHON" + then + AC_MSG_ERROR(no path to python found) + fi + az_python_use=true + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + AZ_PYTHON_PREFIX( ) + elif test "$enableval" = "no" + then + AC_MSG_RESULT(no) + az_python_use=false + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + else + # $enableval must be the executable path then. + AC_SUBST([PYTHON], ["${enableval}"]) + AC_MSG_RESULT($withval) + az_python_use=true + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + AZ_PYTHON_PREFIX( ) + fi + ], + [ + # --with-python was not specified. + AC_MSG_RESULT(no) + az_python_use=false + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + ] + ) + fi + +]) + + + +# AZ_PYTHON_CSPEC( ) +# ----------------- +# Set up the c compiler options to compile Python +# embedded programs/libraries in $PYTHON_CSPEC if +# $PYTHON has been defined. + +AC_DEFUN([AZ_PYTHON_CSPEC], +[ + AC_ARG_VAR( [PYTHON], [Python Executable Path] ) + if test -n "$PYTHON" + then + AC_MSG_CHECKING([for python include directory]) + az_python_prefix=`${PYTHON} -c "import sys; print sys.prefix"` + if test -z "$az_python_prefix" + then + AC_MSG_ERROR([Python Prefix is not known]) + fi + python_path= + az_python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"` + az_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"` + az_python_includespec="-I`$PYTHON -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_inc();'`" + if test x"$python_prefix" != x"$python_execprefix"; then + az_python_execspec="-I${az_python_execprefix}/include/python${az_python_version}" + az_python_includespec="${az_python_includespec} $az_python_execspec" + fi + az_python_ccshared=`${PYTHON} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('CFLAGSFORSHARED')"` + az_python_cspec="${az_python_ccshared} ${az_python_includespec}" + AC_SUBST([PYTHON_CSPEC], [${az_python_cspec}]) + AC_SUBST([PYTHON_CPPFLAGS], [${az_python_includespec}]) + AC_SUBST([PYTHON_SHORTVERSION], ["${az_python_version}"]) + AC_MSG_RESULT([$PYTHON_CPPFLAGS]) + fi +]) + + + +# AZ_PYTHON_INSIST( ) +# ----------------- +# Look for Python and set the output variable 'PYTHON' +# to 'python' if found, empty otherwise. + +AC_DEFUN([AZ_PYTHON_PATH], +[ + AC_ARG_VAR( [PYTHON], [Python Executable Path] ) + if test -z "$PYTHON" + then + AC_MSG_ERROR([Python Executable not found]) + fi +]) + + + +# AZ_PYTHON_LSPEC( ) +# ----------------- +# Set up the linker options to link Python embedded +# programs/libraries in $PYTHON_LSPEC if $PYTHON +# has been defined. + +AC_DEFUN([AZ_PYTHON_LSPEC], +[ + AC_ARG_VAR( [PYTHON], [Python Executable Path] ) + if test -n "$PYTHON" + then + AC_MSG_CHECKING([for python linker flags]) + AZ_PYTHON_RUN([ +import sys +import distutils.sysconfig +strUseFrameWork = "--enable-framework" +dictConfig = distutils.sysconfig.get_config_vars( ) +strConfigArgs = dictConfig.get("CONFIG_ARGS") +strLinkSpec = dictConfig.get('LDFLAGS') +if -1 == strConfigArgs.find(strUseFrameWork): + strLibPL = dictConfig.get("LIBPL") + if strLibPL and (strLibPL != ""): + strLinkSpec += " -L%s" % (strLibPL) + strSys = dictConfig.get("SYSLIBS") + if strSys and (strSys != ""): + strLinkSpec += " %s" % (strSys) + strSHL = dictConfig.get("SHLIBS") + if strSHL and (strSHL != ""): + strLinkSpec += " %s" % (strSHL) + # Construct the Python Library Name. + strTmplte = " -lpython%d.%d" + if (sys.platform == "win32") or (sys.platform == "os2emx"): + strTmplte = " -lpython%d%d" + strWrk = strTmplte % ( (sys.hexversion >> 24), + ((sys.hexversion >> 16) & 0xff)) + strLinkSpec += strWrk +else: + # This is not ideal since it changes the search path + # for Frameworks which could have side-effects on + # other included Frameworks. However, it is necessary + # where someone has installed more than one frameworked + # Python. Frameworks are really only used in MacOSX. + strLibFW = dictConfig.get("PYTHONFRAMEWORKPREFIX") + if strLibFW and (strLibFW != ""): + strLinkSpec += " -F%s" % (strLibFW) +strLinkSpec += " %s" % (dictConfig.get('LINKFORSHARED')) +print strLinkSpec + ]) + AC_SUBST([PYTHON_LSPEC], [${az_python_output}]) + az_python_ldflags=`${PYTHON} -c "import distutils.sysconfig; \ + print '-L' + distutils.sysconfig.get_python_lib(), '-lpython' + \ + distutils.sysconfig.get_config_var('VERSION');"` + AC_SUBST([PYTHON_LDFLAGS], [${az_python_ldflags}]) + AC_MSG_RESULT([$PYTHON_LDFLAGS]) + fi +]) + + + +# AZ_PYTHON_PATH( ) +# ----------------- +# Look for Python and set the output variable 'PYTHON' +# to 'python' if found, empty otherwise. + +AC_DEFUN([AZ_PYTHON_PATH], +[ + AC_ARG_VAR( [PYTHON], [Python Executable Path] ) + AC_PATH_PROG( PYTHON, python, [], $1 ) + if test -z "$PYTHON" + then + AC_MSG_ERROR([Python Executable not found]) + else + az_python_use=true + fi + AM_CONDITIONAL(PYTHON_USE, test "$az_python_use" = "true") +]) + + + +# AZ_PYTHON_PREFIX( ) +# ------------------- +# Use the values of $prefix and $exec_prefix for the corresponding +# values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. + +AC_DEFUN([AZ_PYTHON_PREFIX], +[ + if test -z "$PYTHON" + then + AC_MSG_ERROR([Python Executable Path is not known]) + fi + AC_MSG_CHECKING([for python extension install directory]) + ax_python_prefix=`${PYTHON} -c "import sys; print sys.prefix"` + ax_python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"` + AC_SUBST([PYTHON_PREFIX], ["${ax_python_prefix}"]) + AC_SUBST([PYTHON_EXECPREFIX], ["${ax_python_execprefix}"]) + PYTHON_EXECDIR=`$PYTHON -c "import distutils.sysconfig; \ + print distutils.sysconfig.get_python_lib();"` + AC_SUBST([PYTHON_EXECDIR]) + AC_MSG_RESULT([$PYTHON_EXECDIR]) +]) + +# AZ_PYTHON_RUN( PYTHON_PROGRAM ) +# ----------------- +# Run a Python Test Program saving its output +# in az_python_output and its condition code +# in az_python_cc. + +AC_DEFUN([AZ_PYTHON_RUN], +[ + AC_ARG_VAR( [PYTHON], [Python Executable Path] ) + if test -z "$PYTHON" + then + AC_MSG_ERROR([Python Executable not found]) + else + cat >conftest.py <<_ACEOF +$1 +_ACEOF + az_python_output=`$PYTHON conftest.py` + az_python_cc=$? + rm conftest.py + if test -f "conftest.pyc" + then + rm conftest.pyc + fi + fi +]) + + + +# AZ_PYTHON_VERSION_CHECK( VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE] ) +# ----------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalant (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# hexversion has been introduced in Python 1.5.2; it's probably not +# worth to support older versions (1.5.1 was released on October 31, 1998). + +AC_DEFUN([AZ_PYTHON_VERSION_CHECK], + [ + AC_ARG_VAR( [PYTHON], [Python Executable Path] ) + if test -n "$PYTHON" + then + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AZ_PYTHON_RUN([ +import sys, string +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +minver = map(int, string.split('$1', '.')) + [[0, 0, 0]] +minverhex = 0 +for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]] +if sys.hexversion >= minverhex: + sys.exit( 0 ) +else: + sys.exit( 1 ) + ]) + if test $az_python_cc -eq 0 + then + $2 + m4_ifvaln( + [$3], + [else $3] + ) + fi + fi +]) + + + +# AZ_PYTHON_VERSION_ENSURE( VERSION ) +# ----------------- +# Insure that the Python Interpreter Version +# is greater than or equal to the VERSION +# parameter. + +AC_DEFUN([AZ_PYTHON_VERSION_ENSURE], +[ + AZ_PYTHON_VERSION_CHECK( + [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)] + ) +]) + + + +# AZ_PYTHON_WITH( [path] ) +# ----------------------------------------------------------------- +# Handles the various --with-python commands. +# Input: +# $1 is the optional search path for the python executable if needed +# Ouput: +# PYTHON_USE (AM_CONDITIONAL) is true if python executable found +# and --with-python was requested; otherwise false. +# $PYTHON contains the full executable path to python if PYTHON_USE +# is true. +# +# Example: +# AZ_PYTHON_WITH( ) +# or +# AZ_PYTHON_WITH("/usr/bin") + +AC_DEFUN([AZ_PYTHON_WITH], +[ + AC_ARG_VAR([PYTHON],[Python Executable Path]) + + # unless PYTHON was supplied to us (as a precious variable), + # see if --with-python[=PythonExecutablePath], --with-python, + # --without-python or --with-python=no was given. + if test -z "$PYTHON" + then + AC_MSG_CHECKING(for --with-python) + AC_ARG_WITH( + python, + AC_HELP_STRING([--with-python@<:@=PYTHON@:>@], + [absolute path name of Python executable] + ), + [ + if test "$withval" = "yes" + then + # "yes" was specified, but we don't have a path + # for the executable. + # So, let's searth the PATH Environment Variable. + AC_MSG_RESULT(yes) + AC_PATH_PROG( + [PYTHON], + python, + [], + $1 + ) + if test -z "$PYTHON" + then + AC_MSG_ERROR(no path to python found) + fi + az_python_use=true + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + AZ_PYTHON_CSPEC() + AZ_PYTHON_LSPEC() + AZ_PYTHON_PREFIX() + elif test "$withval" = "no" + then + AC_MSG_RESULT(no) + az_python_use=false + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + else + # $withval must be the executable path then. + AC_SUBST([PYTHON], ["${withval}"]) + AC_MSG_RESULT($withval) + az_python_use=true + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + AZ_PYTHON_CSPEC() + AZ_PYTHON_LSPEC() + AZ_PYTHON_PREFIX() + fi + ], + [ + # --with-python was not specified. + AC_MSG_RESULT(no) + az_python_use=false + AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") + ] + ) + fi + +]) |
