On Wed, Oct 17, 2012 at 6:10 PM, Bill Hart <goodwillh...@googlemail.com> wrote: > Hi all, > > I am just working on the release of MPIR 2.6.0 and it has been noted > (by Fredrik I think) that there are symbol clashes between the two > libraries. This is not in general a problem if the library order is > correct, but the mistake too easily occurs that the library order is > incorrect. It would also not be a problem if the functions were fully > binary compatible, but this seems to not be the case in at least one > instance, and is not something we want to maintain for the future > under any circumstances. > > Below is a list of the functions involved (the list is from MPIR). The > ones with * before their name actually have the same name as the > equivalent flint function: > > * fft_split_limbs > * fft_split_bits > * n_revbin > * mpn_normmod_2expp1 > * fft_naive_convolution_1 > * fft_mulmod_2expp1 > * fft_adjust_limbs > mpn_mulmod_Bexpp1_fft > mpn_mul_trunc_sqrt2 > mpn_mul_mfa_trunc_sqrt2 > * mpn_mul_fft_main > * mpn_mul_2expmod_2expp1 > * ifft_butterfly_sqrt2 > ifft_trunc_sqrt2 > ifft_trunc1 > ifft_trunc > * ifft_butterfly > * ifft_radix2 > * ifft_negacyclic > * ifft_butterfly_twiddle > * ifft_radix2_twiddle > ifft_trunc1_twiddle > ifft_mfa_trunc_sqrt2 > ifft_mfa_trunc_sqrt2_outer > * fft_butterfly_sqrt2 > fft_trunc_sqrt2 > fft_trunc1 > fft_trunc > * fft_butterfly > * fft_radix2 > * fft_negacyclic > fft_mfa_trunc_sqrt2_inner > * fft_butterfly_twiddle > * fft_radix2_twiddle > fft_trunc1_twiddle > fft_mfa_trunc_sqrt2 > fft_mfa_trunc_sqrt2_outer > * fermat_to_mpz > * mpn_div_2expmod_2expp1 > * fft_combine_limbs > * fft_combine_bits > * butterfly_rshB > * butterfly_lshB > * fft_adjust_sqrt2 > * fft_adjust > > * n_sqrt > * n_precompute_inverse > * n_is_square > * n_preinvert_limb > * n_addmod > * n_submod > * n_mod2_preinv > * n_ll_mod_preinv > * n_mulmod_precomp > * n_mulmod2_preinv > * n_powmod_precomp > * n_powmod2_preinv > * n_powmod > * n_powmod2 > * n_gcd > * n_invmod > * n_jacobi > * n_is_pseudoprime_fermat > * n_is_strong_pseudoprime_precomp > * n_is_strong_pseudoprime2_preinv > * fchain_precomp > * fchain2_preinv > * n_is_pseudoprime_fibonacci > * lchain_precomp > * lchain2_preinv > * n_is_pseudoprime_lucas > * is_likely_prime_BPSW > > Now, all the functions after the break should have been called > mpir_n_blah right from the start. But they are only used in one file > (that I can see) and so can probably just all be made static. If I > understand the meaning of the specifier correctly, this means the > function is visible in the file (internal translation unit in the > parlance) that it is declared in only. This is what we want for all > the functions after the break. > > The fft functions however are more problematic. These probably want to > be maintained as internal functions in MPIR to be used elsewhere as > required. > > I propose we change n_revbin to mpir_revbin. > > All of the fft_blah and ifft_blah functions should become > mpir_fft_blah and mpir_ifft_blah. This will also prevent future > potential clashes with GMP. > > And I think all the mpn_blah functions (although ostensibly well-named > for the time being) should become mpir_blah. The other option is for > flint to rename the mpn functions to something else. But what to > rename them? They are in our mpn_extras module. They won't be exported > publicly in MPIR, so we certainly cannot simply do a #if defined > around them in flint. And anyway, even if we did export them publicly > in MPIR (which is an option worth considering), we'd have to call them > mpir_blah anyway, to prevent potential future conflict with GMP. > > Another issue is that (rightly or wrongly) all these mpn_extra > functions have been in a published flint interface for some time. So > it makes at least some sense to change the names in MPIR not flint. On > the other hand, mpn is a namespace belonging to gmp/mpir, so how to > handle mpn_extras functions in flint remains an unsolved problem.
We should probably rename the mpn_* functions in flint to flint_mpn_* or something similar. I doubt these functions are currently used externally anyway. There are even some inline functions in flint.h that override mpir functions (such as mpn_copyi), and this could potentially cause trouble. Fredrik -- You received this message because you are subscribed to the Google Groups "mpir-devel" group. To post to this group, send email to mpir-devel@googlegroups.com. To unsubscribe from this group, send email to mpir-devel+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/mpir-devel?hl=en.