hostconf

A host inspection/configuration tool to replace autoconf


License
BSD-3-Clause
Install
pip install hostconf==0.2.0

Documentation

HostConf
========

The goal of this package is to be a replacement for GNU autoconf support
for a package which needs to "inspect" the local host system to see if
it needs some special local configurations to make it work.

The idea is to replace the 'configure' script generated by an assortment
of autoconf tools (... along with all of the dependencies of ``sed``,
``gawk``, ``make``, ... which generally must be the GNU versions) with a
pure Python implementation. Ideally, it is basically an extension of the
functionality in distutils, and relies heavily on that infrastructure.

Hostconf now only relies on the necessary items in ``distutils`` which
would be used to build the extensions anyway (``cc``, ``c++``, ``ld``, ...)


Origin
------

It has been developed during the porting of pyeditline. That package
requires libedit (ala NetBSD), and the main, multiplatform, distro of it
uses autoconf. This is pretty handy, but even by itself, it carries a
lot of baggage and can be quite a pain on some platforms to build.

PyEditline now relies *only* on Python and the compiler available to do
all of the host detection (libraries, header files, types, ...)

Current Support
===============

The module contains a Configure class which does the bulk of the work,
the mapping functionality implemented so far is:

+--------------------------------+----------------------------------------------------+
| AutoConf                       | Member                                             |
+================================+====================================================+
| AC_CHECK_STDC                  | check_stdc()                                       |
+--------------------------------+----------------------------------------------------+
| AC_CHECK_MSG                   | check_msg()                                        |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_MSG_RESULT          |   check_msg_result()                               |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_TOOL                |   check_tool()                                     |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_HEADERS             |   check_headers()                                  |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_HEADER              |   check_header()                                   |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_DECL                |   check_decl()                                     |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_LIB                 |   check_lib()                                      |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_TYPE                |   check_type()                                     |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_MEMBER              |   check_member()                                   |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_HEADER_DIRENT       |   check_header_dirent()                            |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_HEADER_SYS_WAIT     |   check_header_sys_wait()                          |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_TYPE_SIGNAL         |   check_type_signal()                              |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_TYPE_PID_T          |   check_type_pid_t()                               |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_TYPE_SIZE_T         |   check_type_size_t()                              |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_FUNC_FORK           |   check_func_fork()   and   check_func_vfork()     |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_FUNC_STAT           |   check_func_stat()                                |
+--------------------------------+----------------------------------------------------+
|   AC_CHECK_FUNC_LSTAT          |   check_func_lstat()                               |
+--------------------------------+----------------------------------------------------+

The eventual goal in mind is to be able to, more or less, suck in the
autoconf.ac file of a distro and just "run" it. For now, you have to
hand-write a method to call the collection of tests required.

Benefits
========

The class is setup in such a way to try to leverage all available
information provided by the ``sysconfig`` Python class provided with the
distro, which is, more or less, cooked-up by the actual
autoconf/configure utility run to build Python itself. This helps do
(ok, avoid) some of the nastier checks, because it already *has* the
answer.

Notes
=====

If/When you are developing additional support based on this, or for
this, remember that distutils often adds more "options" to the compile
infra than the normal autoconf.