From ee91e2549921075b02f0a88fb48323b1c015228c Mon Sep 17 00:00:00 2001 From: David Cole Date: Wed, 1 Aug 2007 13:04:45 -0400 Subject: [PATCH] BUG: Only pay attention to the FRAMEWORK target property for SHARED library targets --- Source/cmGlobalXCodeGenerator.cxx | 9 ++++++--- Source/cmLocalGenerator.cxx | 3 ++- Source/cmMakefileLibraryTargetGenerator.cxx | 5 +++-- Source/cmTarget.cxx | 6 ++++-- Tests/Framework/CMakeLists.txt | 22 ++++++++++++++++++--- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 7a66cf5bd..f4c641177 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -727,7 +727,8 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen, buildFiles->AddObject(xsf); } } - if(cmtarget.GetPropertyAsBool("FRAMEWORK")) + if (cmtarget.GetType() == cmTarget::SHARED_LIBRARY && + cmtarget.GetPropertyAsBool("FRAMEWORK")) { this->AddFrameworkPhases(&cmtarget, buildPhases); } @@ -1239,7 +1240,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target, target.GetType() == cmTarget::EXECUTABLE) { std::string pndir = target.GetDirectory(); - if(target.GetPropertyAsBool("FRAMEWORK")) + if (target.GetType() == cmTarget::SHARED_LIBRARY && + target.GetPropertyAsBool("FRAMEWORK")) { pndir += "/.."; pndir = cmSystemTools::CollapseFullPath(pndir.c_str()); @@ -2053,7 +2055,8 @@ void cmGlobalXCodeGenerator::CreateGroups(cmLocalGenerator* root, } std::vector classes = cmtarget.GetSourceFiles(); // add framework copy headers - if(cmtarget.GetPropertyAsBool("FRAMEWORK")) + if (cmtarget.GetType() == cmTarget::SHARED_LIBRARY && + cmtarget.GetPropertyAsBool("FRAMEWORK")) { const char* headers = cmtarget.GetProperty("FRAMEWORK_PUBLIC_HEADERS"); if(!headers) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index bcf89e18f..9912c6fff 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1775,7 +1775,8 @@ void cmLocalGenerator // do not add the target full name but just use the directory // name #ifdef __APPLE__ - if(!tgt->GetPropertyAsBool("FRAMEWORK")) + if (!(tgt->GetType() == cmTarget::SHARED_LIBRARY && + tgt->GetPropertyAsBool("FRAMEWORK"))) #endif { linkItem += "/"; diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx index 9ec7f98ba..2025f2561 100644 --- a/Source/cmMakefileLibraryTargetGenerator.cxx +++ b/Source/cmMakefileLibraryTargetGenerator.cxx @@ -112,7 +112,7 @@ void cmMakefileLibraryTargetGenerator::WriteStaticLibraryRules() void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink) { #ifdef __APPLE__ - if(this->Target->GetPropertyAsBool("FRAMEWORK")) + if (this->Target->GetPropertyAsBool("FRAMEWORK")) { this->WriteFrameworkRules(relink); return; @@ -505,7 +505,8 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules } #if defined(__APPLE__) // If we're creating a framework, place the output into a framework directory - if(this->Target->GetPropertyAsBool("FRAMEWORK")) + if (this->Target->GetType() == cmTarget::SHARED_LIBRARY && + this->Target->GetPropertyAsBool("FRAMEWORK")) { this->CreateFramework(targetName, outpath); } diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 1ca187d13..c4b6e3407 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1790,7 +1790,8 @@ void cmTarget::NormalGetFullNameInternal(TargetType type, } #if defined(__APPLE__) // frameworks do not have a prefix or a suffix - if(this->GetPropertyAsBool("FRAMEWORK")) + if (this->GetType() == cmTarget::SHARED_LIBRARY && + this->GetPropertyAsBool("FRAMEWORK")) { targetPrefix = 0; targetSuffix = 0; @@ -2322,7 +2323,8 @@ const char* cmTarget::GetOutputDir(bool implib) #if defined(__APPLE__) // frameworks do not have a prefix or a suffix - if(this->GetPropertyAsBool("FRAMEWORK")) + if (this->GetType() == cmTarget::SHARED_LIBRARY && + this->GetPropertyAsBool("FRAMEWORK")) { out += "/"; out += this->GetFullName(0, implib); diff --git a/Tests/Framework/CMakeLists.txt b/Tests/Framework/CMakeLists.txt index 5bcc484e7..82645052a 100644 --- a/Tests/Framework/CMakeLists.txt +++ b/Tests/Framework/CMakeLists.txt @@ -1,6 +1,7 @@ project(Framework) -add_library(foo SHARED foo.cxx foo.h ) -set_target_properties(foo PROPERTIES + +add_library(foo SHARED foo.cxx foo.h) +set_target_properties(foo PROPERTIES FRAMEWORK TRUE FRAMEWORK_PUBLIC_HEADERS "foo.h;foo2.h" FRAMEWORK_VERSION ver2 @@ -8,4 +9,19 @@ set_target_properties(foo PROPERTIES ) add_executable(bar bar.cxx) target_link_libraries(bar foo) - + + +# Make a static library and apply the framework properties to it to verify +# that everything still builds correctly, but it will not actually produce +# a framework... The framework properties only apply when the library type +# is SHARED. +# +add_library(fooStatic STATIC foo.cxx foo.h) +set_target_properties(fooStatic PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_PUBLIC_HEADERS "foo.h;foo2.h" + FRAMEWORK_VERSION ver2 + FRAMEWORK_RESOURCES "test.lua" +) +add_executable(barStatic bar.cxx) +target_link_libraries(barStatic fooStatic)