On Tue, Sep 25, 2012 at 10:31 PM, Nigel Taylor
<njtay...@asterisk.demon.co.uk> wrote:
> On 09/24/12 15:14, David Coppa wrote:
>>
>> Hi,
>>
>> The following diff lets cmake build shared libraries without soname,
>> which is compliant to our policy for shared libraries.
>>
>> This should go in a bulk build.
>> I already know for example that net/libproxy is failing with this,
>> but I already have patches ready for it...
>>
>> Let me know about other eventual failures caused by this patch.
>>
>> Thanks!
>> David
>>
>> Index: Makefile
>> ===================================================================
>> RCS file: /cvs/ports/devel/cmake/Makefile,v
>> retrieving revision 1.64
>> diff -u -p -r1.64 Makefile
>> --- Makefile  31 Aug 2012 12:28:31 -0000      1.64
>> +++ Makefile  24 Sep 2012 14:06:42 -0000
>> @@ -7,6 +7,7 @@ HOMEPAGE =    http://www.cmake.org/
>>  CATEGORIES = devel
>>  COMMENT =    portable build system
>>  DISTNAME =   cmake-2.8.9
>> +REVISION =   0
>>  MASTER_SITES =       ${HOMEPAGE}files/v2.8/
>>
>>  MAINTAINER = David Coppa <dco...@openbsd.org>
>> Index: patches/patch-Source_cmComputeLinkInformation_cxx
>> ===================================================================
>> RCS file: patches/patch-Source_cmComputeLinkInformation_cxx
>> diff -N patches/patch-Source_cmComputeLinkInformation_cxx
>> --- /dev/null 1 Jan 1970 00:00:00 -0000
>> +++ patches/patch-Source_cmComputeLinkInformation_cxx 24 Sep 2012 14:06:43 
>> -0000
>> @@ -0,0 +1,68 @@
>> +$OpenBSD$
>> +--- Source/cmComputeLinkInformation.cxx.orig Thu Aug  9 20:15:19 2012
>> ++++ Source/cmComputeLinkInformation.cxx      Tue Aug 28 14:27:03 2012
>> +@@ -1059,12 +1059,18 @@ void 
>> cmComputeLinkInformation::AddTargetItem(std::stri
>> +     this->SharedLibrariesLinked.insert(target);
>> +     }
>> +
>> +-  // Handle case of an imported shared library with no soname.
>> +-  if(this->NoSONameUsesPath &&
>> +-     target->IsImportedSharedLibWithoutSOName(this->Config))
>> ++  if(this->OpenBSD)
>> +     {
>> +     this->AddSharedLibNoSOName(item);
>> +     return;
>> ++    } else {
>> ++    // Handle case of an imported shared library with no soname.
>> ++    if(this->NoSONameUsesPath &&
>> ++       target->IsImportedSharedLibWithoutSOName(this->Config))
>> ++      {
>> ++      this->AddSharedLibNoSOName(item);
>> ++      return;
>> ++      }
>> +     }
>> +
>> +   // If this platform wants a flag before the full path, add it.
>> +@@ -1389,23 +1395,29 @@ void 
>> cmComputeLinkInformation::AddFrameworkPath(std::s
>> + 
>> //----------------------------------------------------------------------------
>> + bool cmComputeLinkInformation::CheckSharedLibNoSOName(std::string const& 
>> item)
>> + {
>> +-  // This platform will use the path to a library as its soname if the
>> +-  // library is given via path and was not built with an soname.  If
>> +-  // this is a shared library that might be the case.
>> +-  std::string file = cmSystemTools::GetFilenameName(item);
>> +-  if(this->ExtractSharedLibraryName.find(file))
>> ++  if(this->OpenBSD)
>> +     {
>> +-    // If we can guess the soname fairly reliably then assume the
>> +-    // library has one.  Otherwise assume the library has no builtin
>> +-    // soname.
>> +-    std::string soname;
>> +-    if(!cmSystemTools::GuessLibrarySOName(item, soname))
>> ++    this->AddSharedLibNoSOName(item);
>> ++    return true;
>> ++    } else {
>> ++    // This platform will use the path to a library as its soname if the
>> ++    // library is given via path and was not built with an soname.  If
>> ++    // this is a shared library that might be the case.
>> ++    std::string file = cmSystemTools::GetFilenameName(item);
>> ++    if(this->ExtractSharedLibraryName.find(file))
>> +       {
>> +-      this->AddSharedLibNoSOName(item);
>> +-      return true;
>> ++      // If we can guess the soname fairly reliably then assume the
>> ++      // library has one.  Otherwise assume the library has no builtin
>> ++      // soname.
>> ++      std::string soname;
>> ++      if(!cmSystemTools::GuessLibrarySOName(item, soname))
>> ++        {
>> ++        this->AddSharedLibNoSOName(item);
>> ++        return true;
>> ++        }
>> +       }
>> ++    return false;
>> +     }
>> +-  return false;
>> + }
>> +
>> + 
>> //----------------------------------------------------------------------------
>> Index: patches/patch-Source_cmTarget_cxx
>> ===================================================================
>> RCS file: /cvs/ports/devel/cmake/patches/patch-Source_cmTarget_cxx,v
>> retrieving revision 1.13
>> diff -u -p -r1.13 patch-Source_cmTarget_cxx
>> --- patches/patch-Source_cmTarget_cxx 31 Aug 2012 12:28:31 -0000      1.13
>> +++ patches/patch-Source_cmTarget_cxx 24 Sep 2012 14:06:43 -0000
>> @@ -1,7 +1,24 @@
>>  $OpenBSD: patch-Source_cmTarget_cxx,v 1.13 2012/08/31 12:28:31 dcoppa Exp $
>>  --- Source/cmTarget.cxx.orig Thu Aug  9 20:15:19 2012
>> -+++ Source/cmTarget.cxx      Thu Aug 23 11:25:48 2012
>> -@@ -3380,9 +3380,43 @@ void cmTarget::GetLibraryNames(std::string& name,
>> ++++ Source/cmTarget.cxx      Mon Aug 27 15:07:12 2012
>> +@@ -3022,12 +3022,16 @@ std::string cmTarget::GetPDBName(const char* config)
>> + 
>> //----------------------------------------------------------------------------
>> + bool cmTarget::HasSOName(const char* config)
>> + {
>> ++#if !defined(__OpenBSD__)
>> +   // soname is supported only for shared libraries and modules,
>> +   // and then only when the platform supports an soname flag.
>> +   return ((this->GetType() == cmTarget::SHARED_LIBRARY ||
>> +            this->GetType() == cmTarget::MODULE_LIBRARY) &&
>> +           !this->GetPropertyAsBool("NO_SONAME") &&
>> +           this->Makefile->GetSONameFlag(this->GetLinkerLanguage(config)));
>> ++#else
>> ++  return false;
>> ++#endif
>> + }
>> +
>> + 
>> //----------------------------------------------------------------------------
>> +@@ -3380,9 +3384,43 @@ void cmTarget::GetLibraryNames(std::string& name,
>>     // The library name.
>>     name = prefix+base+suffix;
>>
>> @@ -45,7 +62,7 @@ $OpenBSD: patch-Source_cmTarget_cxx,v 1.
>>
>>     // The library's real name on disk.
>>     this->ComputeVersionedName(realName, prefix, base, suffix,
>> -@@ -3415,7 +3449,23 @@ void cmTarget::ComputeVersionedName(std::string& 
>> vName
>> +@@ -3415,7 +3453,23 @@ void cmTarget::ComputeVersionedName(std::string& 
>> vName
>>     if(version)
>>       {
>>       vName += ".";
>>
>>
>
> failures on amd64 are:-
> databases/dbic++
> www/nginx/devel,passenger
> www/nginx/stable,passenger
> sysutils/collectd,-rrdtool
> devel/hs-type-level
> devel/hs-vector
> graphics/hugin
>
> database/dbic++ - uses cmake. now has missing libraries in PLIST
> next 3 are missing bumps in REVISION (two appear to be ruby 1.9 related).
> last 3 are old ghc issues.
>
> openvas port in mystuff uses cmake, this rebuilt successfully main
> reason for checking.
>
> i386 machine is still running a build, security/libssh failed, which
> uses cmake, when tried on amd64 also failed with same error.
>
> These are not full builds, uses dpb -R to rebuilding only the required
> ports.
>
> Reverting back cmake, both dbic++ and libssh build on amd64.

Thanks a lot,

I'll have a look at dbic++ and libssh tomorrow.

ciao,
David

Reply via email to