Dear all,

------------
Problem
------------
    This is a problem I faced when building prerequisite libraries(gmp, mpfr, mpc, ppl, cloog) 
    before building gcc-4.7.2 from source today.
    I found a mismatch between GMP and PPL when trying to compile the PPL library from source code.
    (Building GMP alone is fine.)
-------------------------------
Source Code Version
-------------------------------
    The source code that I downloaded from are
    a. GMP
        Site: 
            http://gmplib.org/#DOWNLOAD
Download link:
   ftp://ftp.gmplib.org/pub/gmp-5.1.0/gmp-5.1.0.tar.bz2
b. PPL(Parma Polyhedra Library)
Site: 
   http://bugseng.com/products/ppl/download
Download link: 
   http://bugseng.com/products/ppl/download/ftp/releases/1.0/ppl-1.0.tar.bz2
-----------------------
Problem Details
-----------------------
    1.  < Redefinition of numeric_limits >
        ppl-1.0/src/mp_std_bits.defs.hh:47 and
gmp-5.1.0/gmpxx.h:3269
both define 
numeric_limits<mpz_class> and
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
numeric_limits<mpq_class>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        Problem:
        It would lead to a redefinition error when trying to compile PPL source code to object code.
        It seems that the newer GMP library(5.1.0) has included the definition of numeric_limits but
for PPL library, the definitions are not removed.
        I googled this problem. There are also some reports to this problem.

Fix:
I commented out the numeric_limits defined in ppl-1.0/src/mp_std_bits.defs.hh.
    2.  < Static data member name mismatches >
   
         ppl-1.0/src/mp_std_bits.defs.hh:72 and ppl-1.0/src/mp_std_bits.defs.hh:133 defines
 static const bool tininess_before = false;
                                  ^^^^^^^^^^^^^^^^^
         However, in
         gmp-5.1.0/gmpxx.h:3302 and gmp-5.1.0/gmpxx.h:3339, there are
 static const bool tinyness_before = false;
                 ^^^^^^^^^^^^^^^^^^
    Problem:
 I am not sure if the two data member are the same. Since I commented out the whole block of 
 numeric_limits in ppl-1.0/src/mp_std_bits.defs.hh in the last step, the member `tininess_before'
 cannot be resolved.
 Fix:
 Finally, I add 
 static const bool tininess_before = false;
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 in gmp-5.1.0/gmpxx.h:3303 and gmp-5.1.0/gmpxx.h:3341
 and add member initialization 
 const bool numeric_limits<T>::tininess_before; \ 
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 in gmp-5.1.0/cxx/limits.cc:47
 and rebuild the gmp library.
 So, for PPL library, even if the code for numeric_limits is commented out, the declarations and object
 code can be found from GMP library.
----------------
Conclusion
----------------
    GMP and PPL libraries can be compiled. I am running the PPL 'make check' test now.
    I am not sure whether it is a bug so I decided to report the issue to both sides. Hope that 
    the mismatch can be fixed, thanks!
---------------------
Attached Files
---------------------
    The mismatches are not related to configuration, so I skipped 'config.log'. If needed, please reply to me.
    gcc-v.log                          : GCC version
    uname-a.log                     : Info of environment
    diff_gmpxx.h.txt                : Modification of gmp-5.1.0/gmpxx.h
    diff_mp_std_bits.defs.hh   : Modification of ppl-1.0/src/mp_std_bits.defs.hh
    diff_limits.cc.txt                : Modification of gmp-5.1.0/cxx/limits.cc
Best Regards
-- chiahsun