diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 8510625e7ce672f4423a2f64d881a32f9d4f0ab7..5898d1bfadf22020e95e9536ab7732ceca37cd03 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,20 @@
+2012-02-15  Benjamin Kosnik  <bkoz@redhat.com>
+
+	PR libstdc++/51368
+	* acinclude.m4 (GLIBCXX_ENABLE_PYTHON): New.
+	* configure.ac: Use it.
+	* python/Makefile.am: Same.
+	* configure: Regenerate.
+	* python/Makefile.in: Regenerate.
+	* Makefile.in: Same.
+	* doc/Makefile.in: Same.
+	* include/Makefile.in: Same.
+	* po/Makefile.in: Same.
+	* src/Makefile.in: Same.
+	* src/c++11/Makefile.in: Same.
+	* src/c++98/Makefile.in: Same.
+	* testsuite/Makefile.in: Same.
+
 2012-02-14  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
 	* 30_threads/thread/native_handle/typesizes.cc: Do not run on cygwin.
@@ -30,7 +47,7 @@
 	* libsupc++/guard.cc (__cxa_guard_acquire): Same.
 
 2012-02-10  Benjamin Kosnik  <bkoz@redhat.com>
-            Jonathan Wakely  <jwakely.gcc@gmail.com>
+	    Jonathan Wakely  <jwakely.gcc@gmail.com>
 
 	PR libstdc++/51798 continued.
 	* acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Use __atomic_*
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index 5657e38a511f70ea30ca57184a6fb32622439a29..74fade4ca477c84ab614b741a278e8de6a96ff94 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -264,6 +264,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index e089b20dd4f6d153c84a111d878883f501b07ab9..61fdb42c66dea1c17a4db58e6c6fe45242d75f55 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -1737,26 +1737,26 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_PROTO], [
 	     {  return __builtin_fabsf(__x); }
 	   }
 	])],
-        [glibcxx_cv_abs_float=no],
-        [glibcxx_cv_abs_float=yes]
+	[glibcxx_cv_abs_float=no],
+	[glibcxx_cv_abs_float=yes]
       )])
 
       # autoheader cannot handle indented templates.
       AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO1],
-        [/* Define if all C++ overloads are available in <math.h>.  */
+	[/* Define if all C++ overloads are available in <math.h>.  */
 #if __cplusplus >= 199711L
 #undef __CORRECT_ISO_CPP_MATH_H_PROTO1
 #endif])
       AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO2],
-        [/* Define if only double std::abs(double) is available in <math.h>.  */
+	[/* Define if only double std::abs(double) is available in <math.h>.  */
 #if __cplusplus >= 199711L
 #undef __CORRECT_ISO_CPP_MATH_H_PROTO2
 #endif])
 
       if test $glibcxx_cv_abs_float = yes; then
-        AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO1)
+	AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO1)
       else
-        AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO2)
+	AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO2)
       fi
       AC_MSG_RESULT($glibcxx_cv_abs_float)
       ;;
@@ -1787,19 +1787,19 @@ AC_DEFUN([GLIBCXX_CHECK_STDLIB_PROTO], [
 	     inline long
 	     abs(long __i) { return labs(__i); }
 	   }
-        ])],
-        [glibcxx_cv_abs_long=no],
-        [glibcxx_cv_abs_long=yes]
+	])],
+	[glibcxx_cv_abs_long=no],
+	[glibcxx_cv_abs_long=yes]
       )])
 
       # autoheader cannot handle indented templates.
       AH_VERBATIM([__CORRECT_ISO_CPP_STDLIB_H_PROTO],
-        [/* Define if all C++ overloads are available in <stdlib.h>.  */
+	[/* Define if all C++ overloads are available in <stdlib.h>.  */
 #if __cplusplus >= 199711L
 #undef __CORRECT_ISO_CPP_STDLIB_H_PROTO
 #endif])
       if test $glibcxx_cv_abs_long = yes; then
-        AC_DEFINE(__CORRECT_ISO_CPP_STDLIB_H_PROTO, 1)
+	AC_DEFINE(__CORRECT_ISO_CPP_STDLIB_H_PROTO, 1)
       fi
       AC_MSG_RESULT($glibcxx_cv_abs_long)
       ;;
@@ -2495,7 +2495,7 @@ template<typename T>
 
 int main()
 {
-  typename same<double, __float128>::type      f1;	
+  typename same<double, __float128>::type      f1;
   typename same<long double, __float128>::type f2;
 }
 EOF
@@ -2729,7 +2729,7 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
       ],
@@ -2748,7 +2748,7 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
       ],
@@ -2767,7 +2767,7 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
       ],
@@ -2786,7 +2786,7 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
       ],
@@ -2814,10 +2814,10 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
- 
+
   return 0;
 }
 EOF
@@ -2843,7 +2843,7 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -2873,7 +2873,7 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -2902,7 +2902,7 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -3348,13 +3348,13 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
     [
       // In case of POSIX threads check _POSIX_TIMEOUTS.
       #if (defined(_PTHREADS) \
-          && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
+	  && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
       #error
       #endif
     ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
 
   AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
-                     [Define to 1 if mutex_timedlock is available.])
+		     [Define to 1 if mutex_timedlock is available.])
 
   if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
   else res_mutex_timedlock=no ; fi
@@ -3543,6 +3543,27 @@ AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
   AC_LANG_RESTORE
 ])
 
+dnl
+dnl Check to see if python pretty printing can be activated.
+dnl
+dnl --with-python-dir=dir
+dnl installs directory into $prefix/dir
+AC_DEFUN([GLIBCXX_ENABLE_PYTHON], [
+
+AC_MSG_CHECKING([for custom python install directory])
+AC_ARG_WITH([python-dir],
+	    AS_HELP_STRING([--with-python-dir],
+			   [the location to install Python modules. This path is relative starting from the prefix.]),
+	    [with_python_dir=$withval], [with_python_dir="no"])
+AC_MSG_RESULT(${with_python_dir})
+
+# Needed for installing Python modules during make install.
+python_mod_dir="${with_python_dir}"
+AC_SUBST(python_mod_dir)
+GLIBCXX_CONDITIONAL(ENABLE_PYTHONDIR, test $python_mod_dir != no)
+])
+
+
 # Macros from the top-level gcc directory.
 m4_include([../config/gc++filt.m4])
 m4_include([../config/tls.m4])
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index de4a630e25ac0cbd146860aa7e07819f2675049e..3acf5eebe6baf82f9cd6737e8dccaf97b066a346 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -664,6 +664,9 @@ LIBICONV
 OPT_LDFLAGS
 SECTION_LDFLAGS
 GLIBCXX_LIBS
+ENABLE_PYTHONDIR_FALSE
+ENABLE_PYTHONDIR_TRUE
+python_mod_dir
 ENABLE_EXTERN_TEMPLATE_FALSE
 ENABLE_EXTERN_TEMPLATE_TRUE
 EXTRA_CXX_FLAGS
@@ -856,6 +859,7 @@ enable_libstdcxx_debug
 enable_cxx_flags
 enable_fully_dynamic_string
 enable_extern_template
+with_python_dir
 enable_libstdcxx_time
 enable_tls
 enable_rpath
@@ -1568,6 +1572,8 @@ Optional Packages:
   --with-pic              try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-python-dir       the location to install Python modules. This path is
+                          relative starting from the prefix.
   --with-gnu-ld           assume the C compiler uses GNU ld default=no
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
@@ -11486,7 +11492,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11489 "configure"
+#line 11495 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11592,7 +11598,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11595 "configure"
+#line 11601 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14950,7 +14956,7 @@ fi
     #
     # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
     cat > conftest.$ac_ext << EOF
-#line 14953 "configure"
+#line 14959 "configure"
 struct S { ~S(); };
 void bar();
 void foo()
@@ -15128,7 +15134,7 @@ typedef bool atomic_type;
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15170,7 +15176,7 @@ typedef short atomic_type;
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15212,7 +15218,7 @@ typedef int atomic_type;
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15254,7 +15260,7 @@ typedef long long atomic_type;
        atomic_type c3(0);
        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                                   __ATOMIC_RELAXED);
+				   __ATOMIC_RELAXED);
        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
        __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15285,7 +15291,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
   # Fake what AC_TRY_COMPILE does.
 
     cat > conftest.$ac_ext << EOF
-#line 15288 "configure"
+#line 15294 "configure"
 int main()
 {
   typedef bool atomic_type;
@@ -15294,7 +15300,7 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15320,7 +15326,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15323 "configure"
+#line 15329 "configure"
 int main()
 {
   typedef short atomic_type;
@@ -15329,7 +15335,7 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15355,7 +15361,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15358 "configure"
+#line 15364 "configure"
 int main()
 {
   // NB: _Atomic_word not necessarily int.
@@ -15365,7 +15371,7 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15391,7 +15397,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15394 "configure"
+#line 15400 "configure"
 int main()
 {
   typedef long long atomic_type;
@@ -15400,7 +15406,7 @@ int main()
   atomic_type c3(0);
   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
-                              __ATOMIC_RELAXED);
+			      __ATOMIC_RELAXED);
   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
   __atomic_load_n(&c1, __ATOMIC_RELAXED);
 
@@ -15471,7 +15477,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
   # unnecessary for this test.
 
     cat > conftest.$ac_ext << EOF
-#line 15474 "configure"
+#line 15480 "configure"
 int main()
 {
   _Decimal32 d1;
@@ -15513,7 +15519,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
   # unnecessary for this test.
 
     cat > conftest.$ac_ext << EOF
-#line 15516 "configure"
+#line 15522 "configure"
 template<typename T1, typename T2>
   struct same
   { typedef T2 type; };
@@ -15547,7 +15553,7 @@ $as_echo "$enable_int128" >&6; }
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15550 "configure"
+#line 15556 "configure"
 template<typename T1, typename T2>
   struct same
   { typedef T2 type; };
@@ -17240,6 +17246,26 @@ $as_echo "$enable_extern_template" >&6; }
 
 
 
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for custom python install directory" >&5
+$as_echo_n "checking for custom python install directory... " >&6; }
+
+# Check whether --with-python-dir was given.
+if test "${with_python_dir+set}" = set; then :
+  withval=$with_python_dir; with_python_dir=$withval
+else
+  with_python_dir="no"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_python_dir}" >&5
+$as_echo "${with_python_dir}" >&6; }
+
+# Needed for installing Python modules during make install.
+python_mod_dir="${with_python_dir}"
+
+
+
+
 # Checks for operating systems support that doesn't require linking.
 
 
@@ -17286,10 +17312,10 @@ fi
 
 
       if test $glibcxx_cv_abs_float = yes; then
-        $as_echo "#define __CORRECT_ISO_CPP_MATH_H_PROTO1 1" >>confdefs.h
+	$as_echo "#define __CORRECT_ISO_CPP_MATH_H_PROTO1 1" >>confdefs.h
 
       else
-        $as_echo "#define __CORRECT_ISO_CPP_MATH_H_PROTO2 1" >>confdefs.h
+	$as_echo "#define __CORRECT_ISO_CPP_MATH_H_PROTO2 1" >>confdefs.h
 
       fi
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_abs_float" >&5
@@ -17347,7 +17373,7 @@ fi
       # autoheader cannot handle indented templates.
 
       if test $glibcxx_cv_abs_long = yes; then
-        $as_echo "#define __CORRECT_ISO_CPP_STDLIB_H_PROTO 1" >>confdefs.h
+	$as_echo "#define __CORRECT_ISO_CPP_STDLIB_H_PROTO 1" >>confdefs.h
 
       fi
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_abs_long" >&5
@@ -19822,7 +19848,7 @@ main ()
 
       // In case of POSIX threads check _POSIX_TIMEOUTS.
       #if (defined(_PTHREADS) \
-          && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
+	  && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
       #error
       #endif
 
@@ -66046,6 +66072,15 @@ else
 fi
 
 
+    if test $python_mod_dir != no; then
+  ENABLE_PYTHONDIR_TRUE=
+  ENABLE_PYTHONDIR_FALSE='#'
+else
+  ENABLE_PYTHONDIR_TRUE='#'
+  ENABLE_PYTHONDIR_FALSE=
+fi
+
+
     if test $enable_symvers != no; then
   ENABLE_SYMVERS_TRUE=
   ENABLE_SYMVERS_FALSE='#'
@@ -66499,6 +66534,10 @@ if test -z "${ENABLE_EXTERN_TEMPLATE_TRUE}" && test -z "${ENABLE_EXTERN_TEMPLATE
   as_fn_error "conditional \"ENABLE_EXTERN_TEMPLATE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${ENABLE_PYTHONDIR_TRUE}" && test -z "${ENABLE_PYTHONDIR_FALSE}"; then
+  as_fn_error "conditional \"ENABLE_PYTHONDIR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${ENABLE_SYMVERS_TRUE}" && test -z "${ENABLE_SYMVERS_FALSE}"; then
   as_fn_error "conditional \"ENABLE_SYMVERS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 7607e5b732e7f352584fe5c9c4ea0faf7c5cbe12..de5fe95b7e38cd4e89b7e36dca9a3c2ca9708c45 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -130,6 +130,7 @@ GLIBCXX_ENABLE_PARALLEL([yes])
 GLIBCXX_ENABLE_CXX_FLAGS
 GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING([no])
 GLIBCXX_ENABLE_EXTERN_TEMPLATE([yes])
+GLIBCXX_ENABLE_PYTHON
 
 # Checks for operating systems support that doesn't require linking.
 GLIBCXX_CHECK_MATH_PROTO
diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in
index 493cb3496d6102ea7757dae2c801f4312813fbdb..933893448d6542c73f4c16e3daed6001dd0be0d2 100644
--- a/libstdc++-v3/doc/Makefile.in
+++ b/libstdc++-v3/doc/Makefile.in
@@ -248,6 +248,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index c911bb1049ee737d2476bcb5ca441439a4ef5f51..b872ef5070380666e0af7b81b7ee58032e6b6ef3 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -238,6 +238,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in
index 0cb4846aaba4f9d28f6b3cd6f8a0ea0affd445b8..4d4aeb71d0f5daee5c9ce8d6b50dfed0e224bdd2 100644
--- a/libstdc++-v3/libsupc++/Makefile.in
+++ b/libstdc++-v3/libsupc++/Makefile.in
@@ -298,6 +298,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in
index 69528357cb5a61887ac6e73ba56dd40c2bf69641..2fc769fdcf526238d0a832e1acf5d4bd8b909ab6 100644
--- a/libstdc++-v3/po/Makefile.in
+++ b/libstdc++-v3/po/Makefile.in
@@ -238,6 +238,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/python/Makefile.am b/libstdc++-v3/python/Makefile.am
index 457e45ba46ddc39b0c277d78fc892040ee53cc74..49d8f86ac23f258f0caa63d3728bd94b5a9fe8ec 100644
--- a/libstdc++-v3/python/Makefile.am
+++ b/libstdc++-v3/python/Makefile.am
@@ -1,6 +1,6 @@
 ## Makefile for the python subdirectory of the GNU C++ Standard library.
 ##
-## Copyright (C) 2009 Free Software Foundation, Inc.
+## Copyright (C) 2009, 2012 Free Software Foundation, Inc.
 ##
 ## This file is part of the libstdc++ version 3 distribution.
 ## Process this file with automake to produce Makefile.in.
@@ -24,7 +24,11 @@
 include $(top_srcdir)/fragment.am
 
 ## Where to install the module code.
+if ENABLE_PYTHONDIR
+pythondir = $(prefix)/$(python_mod_dir)
+else
 pythondir = $(datadir)/gcc-$(gcc_version)/python
+endif
 
 all-local: gdb.py
 
diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in
index 20d7417fee9e0be06d3c59e8c64d99cbf56e8279..7dde04f7766f84693236e3c5996f227246e96b50 100644
--- a/libstdc++-v3/python/Makefile.in
+++ b/libstdc++-v3/python/Makefile.in
@@ -262,6 +262,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -297,7 +298,8 @@ WARN_CXXFLAGS = \
 
 # -I/-D flags to pass when compiling.
 AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
-pythondir = $(datadir)/gcc-$(gcc_version)/python
+@ENABLE_PYTHONDIR_FALSE@pythondir = $(datadir)/gcc-$(gcc_version)/python
+@ENABLE_PYTHONDIR_TRUE@pythondir = $(prefix)/$(python_mod_dir)
 nobase_python_DATA = \
     libstdcxx/v6/printers.py \
     libstdcxx/v6/__init__.py \
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index 79340a2c7fd6e6b22f1ccce7142d94bd17059a71..9f5a18f260eddb91ccfe26c1ee9e7d377205502f 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -289,6 +289,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/src/c++11/Makefile.in b/libstdc++-v3/src/c++11/Makefile.in
index bcdaa58bd35722b3754c8fc15eb9ee8af3e619e3..7cc1c8c1a8471214a39f583fc8ddce1a982c31d3 100644
--- a/libstdc++-v3/src/c++11/Makefile.in
+++ b/libstdc++-v3/src/c++11/Makefile.in
@@ -256,6 +256,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/src/c++98/Makefile.in b/libstdc++-v3/src/c++98/Makefile.in
index 33222f2e724607e44c19dba9cd3526ff9ebd6d99..33afea4d5d035338bae9d6551f5530fb2c4e5bb2 100644
--- a/libstdc++-v3/src/c++98/Makefile.in
+++ b/libstdc++-v3/src/c++98/Makefile.in
@@ -275,6 +275,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
index d00050621f03e6586065c090c5fde1a1f0eb00c7..fc9b31a42599dc4e388c0579faeb13bc491a2f64 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -238,6 +238,7 @@ port_specific_symbol_files = @port_specific_symbol_files@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+python_mod_dir = @python_mod_dir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@