Add infrastructure to disable the build of certain extensions

Some of the extensions part of the Python core have dependencies on
external libraries (sqlite, tk, etc.) or are relatively big and not
necessarly always useful (CJK codecs for example). By extensions, we
mean part of Python modules that are written in C and therefore
compiled to binary code.

Therefore, we introduce a small infrastructure that allows to disable
some of those extensions. This can be done inside the configure.ac by
adding values to the DISABLED_EXTENSIONS variable (which is a
word-separated list of extensions).

The implementation works as follow :

 * configure.ac defines a DISABLED_EXTENSIONS variable, which is
   substituted (so that when Makefile.pre is generated from
   Makefile.pre.in, the value of the variable is substituted). For
   now, this DISABLED_EXTENSIONS variable is empty, later patches will
   use it.

 * Makefile.pre.in passes the DISABLED_EXTENSIONS value down to the
   variables passed in the environment when calling the setup.py
   script that actually builds and installs those extensions.

 * setup.py is modified so that the existing "disabled_module_list" is
   filled with those pre-disabled extensions listed in
   DISABLED_EXTENSIONS.

Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>, and
then extended by Thomas Petazzoni
<thomas.petazzoni@free-electrons.com>.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 Makefile.pre.in |    4 ++++
 configure.ac    |    2 ++
 setup.py        |    5 ++++-
 3 files changed, 10 insertions(+), 1 deletion(-)

Index: cpython/Makefile.pre.in
===================================================================
--- cpython.orig/Makefile.pre.in
+++ cpython/Makefile.pre.in
@@ -155,6 +155,8 @@
 # configure script arguments
 CONFIG_ARGS=	@CONFIG_ARGS@
 
+# disabled extensions
+DISABLED_EXTENSIONS=	@DISABLED_EXTENSIONS@
 
 # Subdirectories with code
 SRCDIRS= 	@SRCDIRS@
@@ -478,6 +480,7 @@
 sharedmods: $(BUILDPYTHON) pybuilddir.txt
 	$(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \
 		CONFIG_ARGS="$(CONFIG_ARGS)" \
+		DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" \
 		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py build
 
 # Build static library
@@ -1185,6 +1188,7 @@
 # This goes into $(exec_prefix)
 sharedinstall: sharedmods
 	$(RUNSHARED) CONFIG_ARGS="$(CONFIG_ARGS)" \
+		DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" \
 		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \
 	   	--prefix=$(prefix) \
 		--install-scripts=$(BINDIR) \
Index: cpython/configure.ac
===================================================================
--- cpython.orig/configure.ac
+++ cpython/configure.ac
@@ -2175,6 +2175,8 @@
 
 AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
 
+AC_SUBST(DISABLED_EXTENSIONS)
+
 # Check for use of the system expat library
 AC_MSG_CHECKING(for --with-system-expat)
 AC_ARG_WITH(system_expat,
Index: cpython/setup.py
===================================================================
--- cpython.orig/setup.py
+++ cpython/setup.py
@@ -34,7 +34,10 @@
 sysconfig._CONFIG_VARS.update(os.environ)
 
 # This global variable is used to hold the list of modules to be disabled.
-disabled_module_list = []
+try:
+    disabled_module_list = sysconfig.get_config_var("DISABLED_EXTENSIONS").split(" ")
+except KeyError:
+    disabled_module_list = list()
 
 def add_dir_to_list(dirlist, dir):
     """Add the directory 'dir' to the list 'dirlist' (after any relative
