54 lines
2 KiB
Text
54 lines
2 KiB
Text
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()) {
|