ports/devel/cmake/patches/patch-Source_cmGeneratorTarget_cxx

55 lines
2 KiB
Text
Raw Normal View History

2023-08-16 22:26:55 +00:00
Index: Source/cmGeneratorTarget.cxx
--- Source/cmGeneratorTarget.cxx.orig
+++ Source/cmGeneratorTarget.cxx
@@ -5186,6 +5186,50 @@ cmGeneratorTarget::Names cmGeneratorTarget::GetLibrary
targetNames.Output =
cmStrCat(components.prefix, targetNames.Base, components.suffix);
+#if defined(__OpenBSD__)
+ // Override shared library version using LIBxxx_VERSION
+ // environment variable. Needed for OpenBSD ports system.
+ const auto isUseSahredLibs = [&]() -> bool {
+ std::string use_slibs;
+ return ((cmSystemTools::GetEnv("MODCMAKE_USE_SHARED_LIBS", use_slibs) &&
+ use_slibs == std::string("yes")));
+ };
+
+ // Target name libXXX with PREFIX set to ""
+ auto getLibName = [&](std::string& baseName) {
+ const std::string toMatch = "lib";
+ if (baseName.find(toMatch) == 0 && components.prefix == "")
+ return baseName.substr(toMatch.length());
+ return baseName;
+ };
+
+ if (isUseSahredLibs() && this->GetType() == cmStateEnums::SHARED_LIBRARY) {
+ std::string lib_version;
+ const std::string lib_name = "LIB" + getLibName(targetNames.Base) + "_VERSION";
+ if (cmSystemTools::GetEnv(lib_name, lib_version)) {
+ if (!lib_version.empty()) {
+ const size_t first = lib_version.find_first_of(".");
+ const size_t last = lib_version.find_last_of(".");
+
+ if ((first != last) || (first == std::string::npos)) {
+ const std::string msg = "Bad " + lib_name + " specification: " + lib_version;
+ this->LocalGenerator->IssueMessage(MessageType::INTERNAL_ERROR, msg);
+ }
+ else {
+ version = cmValue(new std::string(lib_version));
+ soversion = cmValue(new std::string(lib_version));
+ }
+ }
+ }
+ else {
+ if (soversion) {
+ version = cmValue(new std::string("0.0"));
+ soversion = cmValue(new std::string("0.0"));
+ }
+ }
+ }
+#endif
+
if (this->IsFrameworkOnApple()) {
targetNames.Real = components.prefix;
if (!this->Makefile->PlatformIsAppleEmbedded()) {