ping...

On Sun Feb 27, 2022 at 08:07:43AM +0100, Rafael Sadowski wrote:
> Yet another cmake patch, which needs a full bulk test. Many of you will
> certainly know it, our cmake's SHARED_LIBS handling is broken for new
> shared libs.
> 
> The default "0.0" version has been broken for several months/years.
> Here is a attempt to fix this. With the following patch you get back the
> following lines, if (a) LIBxxx_VERSION is not set and (b) SOVERSION for
> the shared lib is set by cmake. (a) is clear but (b) helps us to handle
> shared libs and not plugins (dlopen) aka shared libs without version.
> 
> ...
> Warning: unregistered shared lib(s)
> SHARED_LIBS +=  fmt                       0.0 # 0.0
> /usr/ports/devel/fmt/pkg/PLIST is new
> 
> 
> Patch changes:
> 
> - Remove MODULE_LIBRARY processing.
>   "MODULE libraries are plugins that are not linked into other targets
>   but may be loaded dynamically at runtime using dlopen-like
>   functionality." --
>   https://cmake.org/cmake/help/latest/command/add_library.html
> 
> - Add default "0.0" version:
>   if type SHARED_LIBRARY AND empty LIBxxx_VERSION BUT SOVERSION is set.
> 
> I would appreciate a bulk test, unfortunately I can't do one.
> 
> Rafael
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/cmake/Makefile,v
> retrieving revision 1.204
> diff -u -p -u -p -r1.204 Makefile
> --- Makefile  26 Feb 2022 19:42:28 -0000      1.204
> +++ Makefile  26 Feb 2022 21:18:17 -0000
> @@ -8,7 +8,7 @@ VER =         3.20.3
>  EPOCH =              0
>  DISTNAME =   cmake-${VER}
>  CATEGORIES = devel
> -REVISION =   4
> +REVISION =   5
>  
>  HOMEPAGE =   https://www.cmake.org/
>  
> Index: patches/patch-Source_cmGeneratorTarget_cxx
> ===================================================================
> RCS file: /cvs/ports/devel/cmake/patches/patch-Source_cmGeneratorTarget_cxx,v
> retrieving revision 1.16
> diff -u -p -u -p -r1.16 patch-Source_cmGeneratorTarget_cxx
> --- patches/patch-Source_cmGeneratorTarget_cxx        9 May 2021 14:46:15 
> -0000       1.16
> +++ patches/patch-Source_cmGeneratorTarget_cxx        26 Feb 2022 21:18:17 
> -0000
> @@ -3,31 +3,14 @@ $OpenBSD: patch-Source_cmGeneratorTarget
>  Index: Source/cmGeneratorTarget.cxx
>  --- Source/cmGeneratorTarget.cxx.orig
>  +++ Source/cmGeneratorTarget.cxx
> -@@ -4810,9 +4810,14 @@ cmGeneratorTarget::Names cmGeneratorTarget::GetLibrary
> -   // Check for library version properties.
> -   cmProp version = this->GetProperty("VERSION");
> -   cmProp soversion = this->GetProperty("SOVERSION");
> -+#if defined(__OpenBSD__)
> -+  if (this->GetType() != cmStateEnums::SHARED_LIBRARY &&
> -+      this->GetType() != cmStateEnums::MODULE_LIBRARY) {
> -+#else
> -   if (!this->HasSOName(config) ||
> -       this->Makefile->IsOn("CMAKE_PLATFORM_NO_VERSIONED_SONAME") ||
> -       this->IsFrameworkOnApple()) {
> -+#endif
> -     // Versioning is supported only for shared libraries and modules,
> -     // and then only when the platform supports an soname flag.
> -     version = nullptr;
> -@@ -4836,6 +4841,36 @@ cmGeneratorTarget::Names cmGeneratorTarget::GetLibrary
> - 
> +@@ -4837,6 +4837,41 @@ cmGeneratorTarget::Names cmGeneratorTarget::GetLibrary
>     // The library name.
>     targetNames.Output = prefix + targetNames.Base + suffix;
> -+
> + 
>  +#if defined(__OpenBSD__)
>  +  // Override shared library version using LIBxxx_VERSION
>  +  // environment variable. Needed for OpenBSD ports system.
> -+  if (this->GetType() == cmStateEnums::SHARED_LIBRARY ||
> -+      this->GetType() == cmStateEnums::MODULE_LIBRARY) {
> ++  if (this->GetType() == cmStateEnums::SHARED_LIBRARY) {
>  +
>  +    std::string env_vers;
>  +    const std::string env_name("LIB" + targetNames.Base + "_VERSION");
> @@ -44,14 +27,21 @@ Index: Source/cmGeneratorTarget.cxx
>  +        msg += " specification: ";
>  +        msg += env_vers;
>  +        this->LocalGenerator->IssueMessage(MessageType::INTERNAL_ERROR, 
> msg);
> -+      } else {
> ++      }
> ++      else {
>  +        version = new std::string(env_vers);
>  +        soversion = new std::string(env_vers);
>  +      }
>  +    }
> ++    else {
> ++      if (soversion) {
> ++        version = new std::string("0.0");
> ++        soversion = new std::string("0.0");
> ++      }
> ++    }
>  +  }
>  +#endif
>  +
> - 
>     if (this->IsFrameworkOnApple()) {
>       targetNames.Real = prefix;
> +     if (!this->Makefile->PlatformIsAppleEmbedded()) {
> 

Reply via email to