PIC

Matthew Knepley knepley at mcs.anl.gov
Wed Dec 14 08:15:29 CST 2005


Barry Smith <bsmith at mcs.anl.gov> writes:

> On Wed, 14 Dec 2005, Matthew Knepley wrote:
>
>> Barry Smith <bsmith at mcs.anl.gov> writes:
>> 
>> >   Hmmm, why should you have a PIC test? Who cares if something
>> > has PIC or not? You only thing you care about is that you CAN
>> > do what you want to do with it? (In this case I think it is simply
>> > that you can build an executable using a shared library PLUS the
>> > given library you are testing.)
>> >
>> >    Barry
>> >
>> > configure is suppose to be "can I ...?" not "is something ...?"
>> 
>>   Because the "can I" is VERY erratic. I can build some shared libraries, but
>> cannot build others. 
>
>   My understanding is that it can build a basic shared library (stand alone 
> with a couple of symbols) BUT cannot build a shared library (and use it) in conjunction
> with the MPI libraries. So I fail to understand why you cannot just test this?????

  This is not my understanding. The checkShared() from MPI.py DOES EXACTLY build a shared
library (two in fact) linked to MPI. These succeed just fine.

> Make a new test that is, exactly the FIRST part of the test
>
>   def checkShared(self, inclu....
>
> up to the code where 
>
>     if not checkLink(includes, body, cleanup = 0, codeBegin = codeBegin, codeEnd = codeEnd, shared = 1):
>       if os.path.isfile(configObj.compilerObj): os.remove(configObj.compilerObj)
>       self.setCompilers.LIBS = oldFlags
>       raise RuntimeError('Could not complete shared library check\nCould not create a shared library using the currently configured shared linker.\nSuggest running with --with-shared=0 if you do not need shared libraries. Otherwise send configure.log to petsc-maint at mcs.anl.gov')
>
> but instead of throwing the silly exception you return 0 here. But if the link 
> succeeds you continue the test until 

  This does succeed.

> ''' % (boolType, checkCode)
>     if finiFunction:
>       body += '  if (isInitialized) '+finiFunction+'();\n'
>     body += '  return (int) isInitialized;\n'
>     codeEnd   = '\n}\n'
>     if not checkLink(includes, body, cleanup = 0, codeBegin = codeBegin, codeEnd = codeEnd, shared = 1):
>       if os.path.isfile(configObj.compilerObj): os.remove(configObj.compilerObj)
>       self.setCompilers.LIBS = oldFlags
>       raise RuntimeError('Could not complete shared library check\nCould not create a shared library using the currently configured shared linker.\nSuggest running with --with-shared=0 if you do not need shared libraries. Otherwise send configure.log to petsc-maint at mcs.anl.gov')
>       return 0
>
> here instead of the exception return 1 or 0 based on whether the link succeeds.
> Do not do the rest of the test.

  This also succeeds, unless I misunderstand greatly the error.

       Matt

>   I may be missing something but I don't understand why this has to be 
> such a difficult thing. We know exactly where things go wrong (based on the log files)
> so we write a test specifically for that problem and report failure or success why
> make life more complicated.
>
>    Barry
>
>>I do not understand the difference between these libraries
>> at the moment, however I DO know that absence of the PIC option causes the error.
>> Furthermore, checking this option allows a precise error message rather than a
>> guess. Lastly, this is in the configure spirit I believe, because we often test
>> the "what" of things, like endianness or the size of void *.
>> 
>>     Matt
>> 
>
>
>

-- 
"Failure has a thousand explanations. Success doesn't need one" -- Sir Alec Guiness




More information about the petsc-dev mailing list