Bruno Haible <[EMAIL PROTECTED]> writes:

> I'm worried that if you activate the replacement
>   # define strstr rpl_strstr
> with its lib/strstr.o file depending on _GL_CHECK_PORTABILITY, or if you
> activate the declaration
>   extern char *strstr (char const *__haystack, char const *__needle);
> only if _GL_CHECK_PORTABILITY, then the program may compile fine with
> _GL_CHECK_PORTABILITY and break without it.

I don't see how that could happen.  If _GL_CHECK_PORTABILITY is
defined, we have "# define strstr rpl_strstr" and "extern char
*rpl_strstr (...);".  That can work only if a strstr.o has been built,
which means HAVE_STRSTR was not defined, which means "# define strstr
rpl_strstr" and "extern char *rpl_strstr (...);" are already in effect.

>>      #if ! @HAVE_STRSTR@
>>      # undef strstr
>>      # define strstr rpl_strstr
>>      #endif
>
> As mentioned above, for some functions, no "# define strstr rpl_strstr"
> is desired.

As I understand it, this is for convenience in debugging.  I suppose
that might be worthwhile in some cases.  So I guess I should go back
to @[EMAIL PROTECTED]

> What does "otherwise" mean? Either 'configure' finds the system's strstr
> OK or it finds problems. What is the third alternative?

The third alternative is that 'configure' does not check whether the
the system's strstr is OK.

Here's the proposal again, amended as per the above:

     #if @REPLACE_STRSTR@
     # undef strstr
     # define strstr rpl_strstr
     #endif
     #if @REPLACE_STRSTR@ || ! @HAVE_DECL_STRSTR@
     extern char *strstr (char const *__haystack, char const *__needle);
     #endif

   @REPLACE_STRSTR@ is:

     0 if 'configure' checks the system strstr and found it to be OK
     or absent.

     1 if 'configure' checks the system strstr and found that it
     exists but has problems.

     _GL_CHECK_PORTABILITY if 'configure' did not check the system
     strstr.

     Maintainers can compile with -D_GL_CHECK_PORTABILITY to
     enable portability checking.


Reply via email to