90d59a716c
environment variable, but we want to do it for shared libraries only. Otherwise a static library gets created as libfoo.a.${LIBfoo_VERSION}, which is wrong. Bug reported and patch tested by Alexandr Shadchin <alexandr DOT shadchin AT gmail DOT com>: thanks! While here, reword/clarify some comments to better explain what my patches do.
69 lines
2.0 KiB
Plaintext
69 lines
2.0 KiB
Plaintext
$OpenBSD: patch-Source_cmTarget_cxx,v 1.6 2010/07/28 20:34:22 dcoppa Exp $
|
|
--- Source/cmTarget.cxx.orig Mon Jun 28 17:15:59 2010
|
|
+++ Source/cmTarget.cxx Wed Jul 28 21:12:36 2010
|
|
@@ -3164,6 +3164,36 @@ void cmTarget::GetLibraryNames(std::string& name,
|
|
std::string suffix;
|
|
this->GetFullNameInternal(config, false, prefix, base, suffix);
|
|
|
|
+#if defined(__OpenBSD__)
|
|
+ // Override shared library version using LIBxxx_VERSION
|
|
+ // environment variable. Needed for OpenBSD ports system.
|
|
+ if(this->GetType() == cmTarget::SHARED_LIBRARY &&
|
|
+ this->Makefile->GetDefinition(sonameFlag.c_str()))
|
|
+ {
|
|
+ std::string env_name = "LIB" + base + "_VERSION";
|
|
+ char *env_vers_cstr = getenv(env_name.c_str());
|
|
+
|
|
+ if (env_vers_cstr != NULL) {
|
|
+ // This means an override is present.
|
|
+ std::string env_vers = std::string(env_vers_cstr);
|
|
+
|
|
+ size_t first = env_vers.find_first_of(".");
|
|
+ size_t last = env_vers.find_first_of(".");
|
|
+
|
|
+ if ((first != last) || (first == std::string::npos)) {
|
|
+ std::string msg = "Bad ";
|
|
+ msg += env_name;
|
|
+ msg += " specification: ";
|
|
+ msg += env_vers;
|
|
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR,
|
|
+ msg.c_str());
|
|
+ } else {
|
|
+ soversion = version = env_vers_cstr;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+#endif
|
|
+
|
|
// The library name.
|
|
name = prefix+base+suffix;
|
|
|
|
@@ -3191,8 +3221,27 @@ void cmTarget::GetLibraryNames(std::string& name,
|
|
if(version)
|
|
{
|
|
realName += ".";
|
|
+#if defined(__OpenBSD__)
|
|
+ // OpenBSD-style versioning scheme for shared libraries.
|
|
+ // Convert libname.so.X.X.X to libname.so.X.X
|
|
+ int j = 0;
|
|
+ for (int i = 0; i < (int)strlen(version); i++)
|
|
+ {
|
|
+ if (version[i] == '.')
|
|
+ {
|
|
+ j++;
|
|
+ if (j == 2)
|
|
+ {
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ realName += version[i];
|
|
+ }
|
|
+ }
|
|
+#else
|
|
realName += version;
|
|
}
|
|
+#endif
|
|
else if(soversion)
|
|
{
|
|
realName += ".";
|