Make sure INTERFACE properties work with OBJECT libraries.

This commit is contained in:
Stephen Kelly 2013-02-08 20:10:22 +01:00
parent 510fdcb188
commit faa927e273
5 changed files with 31 additions and 6 deletions

View File

@ -4781,6 +4781,10 @@ bool isLinkDependentProperty(cmTarget *tgt, const std::string &p,
bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p, bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p,
const char *config) const char *config)
{ {
if (this->TargetTypeValue == OBJECT_LIBRARY)
{
return false;
}
return (p == "POSITION_INDEPENDENT_CODE") || return (p == "POSITION_INDEPENDENT_CODE") ||
isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_BOOL", isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_BOOL",
config); config);
@ -4790,6 +4794,10 @@ bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p,
bool cmTarget::IsLinkInterfaceDependentStringProperty(const std::string &p, bool cmTarget::IsLinkInterfaceDependentStringProperty(const std::string &p,
const char *config) const char *config)
{ {
if (this->TargetTypeValue == OBJECT_LIBRARY)
{
return false;
}
return isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_STRING", return isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_STRING",
config); config);
} }

View File

@ -10,7 +10,11 @@ if(CMAKE_SHARED_LIBRARY_C_FLAGS AND NOT WATCOM)
set(CMAKE_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_C_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_C_FLAGS}")
endif() endif()
add_definitions(-DB_DEF)
add_library(B OBJECT b1.c b2.c) add_library(B OBJECT b1.c b2.c)
target_include_directories(B PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_definitions(B PUBLIC B_DEF)
add_library(Bexport OBJECT b1${vs6}.c b2${vs6}.c) add_library(Bexport OBJECT b1${vs6}.c b2${vs6}.c)
set_property(TARGET Bexport PROPERTY COMPILE_DEFINITIONS Bexport) set_property(TARGET Bexport PROPERTY COMPILE_DEFINITIONS Bexport)
target_include_directories(Bexport PRIVATE $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_definitions(Bexport PRIVATE $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)

View File

@ -4,8 +4,15 @@
#ifndef B_DEF #ifndef B_DEF
# error "B_DEF not defined" # error "B_DEF not defined"
#endif #endif
#if defined(_WIN32) && defined(Bexport) #if defined(_WIN32) && defined(Bexport)
# define EXPORT_B __declspec(dllexport) # define EXPORT_B __declspec(dllexport)
#else #else
# define EXPORT_B # define EXPORT_B
#endif #endif
#if defined(_WIN32) && defined(SHARED_B)
# define IMPORT_B __declspec(dllimport)
#else
# define IMPORT_B
#endif

View File

@ -26,6 +26,9 @@ endif()
# Test static library without its own sources. # Test static library without its own sources.
add_library(ABstatic STATIC ${dummy} $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>) add_library(ABstatic STATIC ${dummy} $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>)
target_include_directories(ABstatic PUBLIC $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_definitions(ABstatic PUBLIC $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)
add_executable(UseABstatic mainAB.c) add_executable(UseABstatic mainAB.c)
target_link_libraries(UseABstatic ABstatic) target_link_libraries(UseABstatic ABstatic)
@ -41,12 +44,17 @@ endif()
# Test shared library without its own sources. # Test shared library without its own sources.
add_library(ABshared SHARED ${dummy} ${ABshared_SRCS}) add_library(ABshared SHARED ${dummy} ${ABshared_SRCS})
target_include_directories(ABshared PUBLIC $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_definitions(ABshared PUBLIC $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)
add_executable(UseABshared mainAB.c) add_executable(UseABshared mainAB.c)
set_property(TARGET UseABshared PROPERTY COMPILE_DEFINITIONS SHARED_B ${NO_A}) set_property(TARGET UseABshared PROPERTY COMPILE_DEFINITIONS SHARED_B ${NO_A})
target_link_libraries(UseABshared ABshared) target_link_libraries(UseABshared ABshared)
# Test executable without its own sources. # Test executable without its own sources.
add_library(ABmain OBJECT mainAB.c) add_library(ABmain OBJECT mainAB.c)
target_include_directories(ABmain PUBLIC $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_definitions(ABmain PUBLIC $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)
add_executable(UseABinternal ${dummy} add_executable(UseABinternal ${dummy}
$<TARGET_OBJECTS:ABmain> $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B> $<TARGET_OBJECTS:ABmain> $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>
) )

View File

@ -1,8 +1,6 @@
#if defined(_WIN32) && defined(SHARED_B)
# define IMPORT_B __declspec(dllimport) #include "b.h"
#else
# define IMPORT_B
#endif
extern IMPORT_B int b1(void); extern IMPORT_B int b1(void);
extern IMPORT_B int b2(void); extern IMPORT_B int b2(void);
#ifndef NO_A #ifndef NO_A