Browse Source

Handle the case where the user changes the DEFINE_SYMBOL property.

This eases porting of KDE code.
Stephen Kelly 14 năm trước cách đây
mục cha
commit
def0a54e0a

+ 6 - 0
Modules/GenerateExportHeader.cmake

@@ -188,6 +188,12 @@ macro(_DO_GENERATE_EXPORT_HEADER TARGET_LIBRARY)
 
   set(INCLUDE_GUARD_NAME "${PREFIX}${EXPORT_MACRO_NAME}_H")
 
+  get_target_property(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY} DEFINE_SYMBOL)
+
+  if (NOT EXPORT_IMPORT_CONDITION)
+    set(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY}_EXPORTS)
+  endif()
+
   configure_file(${myDir}/exportheader.cmake.in ${EXPORT_FILE_NAME} @ONLY)
 endmacro()
 

+ 1 - 1
Modules/exportheader.cmake.in

@@ -7,7 +7,7 @@
 #  define @NO_EXPORT_MACRO_NAME@
 #else
 #  ifndef @EXPORT_MACRO_NAME@
-#    ifdef @TARGET_LIBRARY@_EXPORTS
+#    ifdef @EXPORT_IMPORT_CONDITION@
         /* We are building this library */
 #      define @EXPORT_MACRO_NAME@ @DEFINE_EXPORT@
 #    else

+ 2 - 0
Tests/Module/GenerateExportHeader/CMakeLists.txt

@@ -107,6 +107,8 @@ macro_add_test_library(libstatic)
 add_subdirectory(lib_shared_and_static)
 add_subdirectory(lib_shared_and_statictest)
 
+add_subdirectory(override_symbol)
+
 if (CMAKE_COMPILER_IS_GNUCXX)
   # We deliberately call deprecated methods, and test for that elsewhere.
   # No need to clutter the test output with warnings.

+ 11 - 0
Tests/Module/GenerateExportHeader/override_symbol/CMakeLists.txt

@@ -0,0 +1,11 @@
+project(override_symbol)
+
+add_library(somelib SHARED someclass.cpp)
+
+set_target_properties(somelib PROPERTIES DEFINE_SYMBOL SOMELIB_MAKEDLL)
+
+generate_export_header(somelib)
+
+add_executable(consumer main.cpp)
+
+target_link_libraries(consumer somelib)

+ 9 - 0
Tests/Module/GenerateExportHeader/override_symbol/main.cpp

@@ -0,0 +1,9 @@
+
+#include "someclass.h"
+
+int main(int, char**)
+{
+  SomeClass sc;
+  sc.someMethod();
+  return 0;
+}

+ 7 - 0
Tests/Module/GenerateExportHeader/override_symbol/someclass.cpp

@@ -0,0 +1,7 @@
+
+#include "someclass.h"
+
+void SomeClass::someMethod() const
+{
+
+}

+ 8 - 0
Tests/Module/GenerateExportHeader/override_symbol/someclass.h

@@ -0,0 +1,8 @@
+
+#include "somelib_export.h"
+
+class SOMELIB_EXPORT SomeClass
+{
+public:
+  void someMethod() const;
+};