Revision: 76067
          http://sourceforge.net/p/brlcad/code/76067
Author:   starseeker
Date:     2020-06-08 15:56:48 +0000 (Mon, 08 Jun 2020)
Log Message:
-----------
Replace our custom DLL defines management logic with CMake's 
COMPILE_DEFINITIONS and INTERFACE_COMPILE_DEFINITIONS.  The latter in 
particular should be what we need to automatically propagate the DLL 
definitions to targets using the libraries.

Modified Paths:
--------------
    brlcad/trunk/misc/CMake/BRLCAD_Targets.cmake
    brlcad/trunk/src/libbrep/CMakeLists.txt

Modified: brlcad/trunk/misc/CMake/BRLCAD_Targets.cmake
===================================================================
--- brlcad/trunk/misc/CMake/BRLCAD_Targets.cmake        2020-06-08 08:53:09 UTC 
(rev 76066)
+++ brlcad/trunk/misc/CMake/BRLCAD_Targets.cmake        2020-06-08 15:56:48 UTC 
(rev 76067)
@@ -149,7 +149,7 @@
 # Assemble the targets and compilation flags needed by the target
 function(GET_FLAGS_AND_DEFINITIONS targetname target_libs)
 
-  cmake_parse_arguments(G "" "CFLAGS;CXXFLAGS;DEFINES;DLL_DEFINES" "" ${ARGN})
+  cmake_parse_arguments(G "" "CFLAGS;CXXFLAGS;DEFINES" "" ${ARGN})
 
   #####################################################################
   # Compile flags - note that targets may have separate C and C++ flags
@@ -216,36 +216,6 @@
 
   endif(G_DEFINES)
 
-  # DLL defines (needed for Visual Studio import/export)
-  if(G_DLL_DEFINES)
-
-    get_property(T_DLL_DEFINES GLOBAL PROPERTY ${targetname}_DLL_DEFINES)
-    foreach(libitem ${target_libs})
-      get_property(${libitem}_DLL_DEFINES GLOBAL PROPERTY 
${libitem}_DLL_DEFINES)
-      list(APPEND T_DLL_DEFINES ${${libitem}_DLL_DEFINES})
-    endforeach(libitem ${target_libs})
-
-    # In case of re-running cmake, make sure the DLL_IMPORTS define for this
-    # specific target is removed if the target looks like a library, since for
-    # the actual library target we need to export, not import. (Don't want to
-    # do this willy-nilly, since (for example) the rt exec target and the librt
-    # library will both map to the same "UPPER_CORE" name...)
-    if(T_DLL_DEFINES AND ${targetname} MATCHES "^lib*")
-      string(REPLACE "lib" "" LOWERCORE "${targetname}")
-      string(TOUPPER ${LOWERCORE} UPPER_CORE)
-      list(REMOVE_ITEM T_DLL_DEFINES ${UPPER_CORE}_DLL_IMPORTS)
-    endif(T_DLL_DEFINES AND ${targetname} MATCHES "^lib*")
-
-    # No duplicate definitions needed
-    if(T_DLL_DEFINES)
-      list(REMOVE_DUPLICATES T_DLL_DEFINES)
-    endif(T_DLL_DEFINES)
-
-    # Send the finalized list back to the parent
-    set(${G_DLL_DEFINES} ${T_DLL_DEFINES} PARENT_SCOPE)
-
-  endif(G_DLL_DEFINES)
-
 endfunction(GET_FLAGS_AND_DEFINITIONS)
 
 # Determine the language for a target
@@ -254,7 +224,7 @@
 # than build targets (less logic, simplifies dealing with OBJECT libraries.)
 function(SET_FLAGS_AND_DEFINITIONS srcslist)
 
-  cmake_parse_arguments(S "NO_STRICT_CXX" "TARGET" 
"CFLAGS;CXXFLAGS;DEFINES;DLL_DEFINES" ${ARGN})
+  cmake_parse_arguments(S "NO_STRICT_CXX" "TARGET" "CFLAGS;CXXFLAGS;DEFINES" 
${ARGN})
 
   foreach(srcfile ${srcslist})
 
@@ -331,18 +301,6 @@
 
   endforeach(srcfile ${srcslist})
 
-  # If we have been supplied a target name, set the appropriate properties.
-  if(S_TARGET)
-    set_property(GLOBAL PROPERTY ${S_TARGET}_DEFINES "${S_DEFINES}")
-    if(S_DLL_DEFINES)
-      # Make sure we append here, since the target will probably already have 
this property set.
-      set_property(GLOBAL APPEND PROPERTY ${S_TARGET}_DLL_DEFINES 
"${S_DLL_DEFINES}")
-      foreach(tdef ${S_DLL_DEFINES})
-       set_property(TARGET ${S_TARGET} APPEND PROPERTY COMPILE_DEFINITIONS 
"${tdef}")
-      endforeach(tdef ${S_DLL_DEFINES})
-    endif(S_DLL_DEFINES)
-  endif(S_TARGET)
-
 endfunction(SET_FLAGS_AND_DEFINITIONS)
 
 
@@ -375,10 +333,10 @@
 
   # Use the list of libraries to be linked into this target to
   # accumulate the necessary definitions and compilation flags.
-  GET_FLAGS_AND_DEFINITIONS(${execname} "${libslist}" CFLAGS E_C_FLAGS 
CXXFLAGS E_CXX_FLAGS DEFINES E_DEFINES DLL_DEFINES E_DLL_DEFINES)
+  GET_FLAGS_AND_DEFINITIONS(${execname} "${libslist}" CFLAGS E_C_FLAGS 
CXXFLAGS E_CXX_FLAGS DEFINES E_DEFINES)
 
   # Having built up the necessary sets, apply them
-  SET_FLAGS_AND_DEFINITIONS("${srcslist}" TARGET ${execname} CFLAGS 
"${E_C_FLAGS}" CXXFLAGS "${E_CXX_FLAGS}" DEFINES "${E_DEFINES}" DLL_DEFINES 
"${E_DLL_DEFINES}")
+  SET_FLAGS_AND_DEFINITIONS("${srcslist}" TARGET ${execname} CFLAGS 
"${E_C_FLAGS}" CXXFLAGS "${E_CXX_FLAGS}" DEFINES "${E_DEFINES}")
 
   # If we have libraries to link, link them.
   if(NOT "${libslist}" STREQUAL "" AND NOT "${libslist}" STREQUAL "NONE")
@@ -440,6 +398,11 @@
 
   cmake_parse_arguments(L "SHARED;STATIC;NO_INSTALL;NO_STRICT;NO_STRICT_CXX" 
"FOLDER" "SHARED_SRCS;STATIC_SRCS" ${ARGN})
 
+  # The naming convention used for variables is the upper case of the library
+  # name, without the lib prefix.
+  string(REPLACE "lib" "" LOWERCORE "${libname}")
+  string(TOUPPER ${LOWERCORE} UPPER_CORE)
+
   # Let CMAKEFILES know what's going on
   CMAKEFILES(${srcslist} ${L_SHARED_SRCS} ${L_STATIC_SRCS})
 
@@ -451,7 +414,6 @@
     CFLAGS L_C_FLAGS
     CXXFLAGS L_CXX_FLAGS
     DEFINES L_DEFINES
-    DLL_DEFINES L_DLL_DEFINES
     )
 
   # Local copy of srcslist in case manipulation is needed
@@ -472,8 +434,7 @@
     target_compile_definitions(${libname}-obj PRIVATE BRLCADBUILD 
HAVE_CONFIG_H)
 
     if(HIDE_INTERNAL_SYMBOLS)
-      string(REPLACE "lib" "" LOWERCORE "${libname}")
-      string(TOUPPER ${LOWERCORE} UPPER_CORE)
+
       set_property(TARGET ${libname}-obj APPEND PROPERTY COMPILE_DEFINITIONS 
"${UPPER_CORE}_DLL_EXPORTS")
     endif(HIDE_INTERNAL_SYMBOLS)
 
@@ -496,10 +457,8 @@
     target_compile_definitions(${libname} PRIVATE BRLCADBUILD HAVE_CONFIG_H)
 
     if(HIDE_INTERNAL_SYMBOLS)
-      string(REPLACE "lib" "" LOWERCORE "${libname}")
-      string(TOUPPER ${LOWERCORE} UPPER_CORE)
       set_property(TARGET ${libname} APPEND PROPERTY COMPILE_DEFINITIONS 
"${UPPER_CORE}_DLL_EXPORTS")
-      set_property(GLOBAL APPEND PROPERTY ${libname}_DLL_DEFINES 
"${UPPER_CORE}_DLL_IMPORTS")
+      set_property(TARGET ${libname} APPEND PROPERTY 
INTERFACE_COMPILE_DEFINITIONS  "${UPPER_CORE}_DLL_IMPORTS")
     endif(HIDE_INTERNAL_SYMBOLS)
 
   endif(L_SHARED OR (BUILD_SHARED_LIBS AND NOT L_STATIC))
@@ -534,7 +493,6 @@
     CFLAGS "${L_C_FLAGS}"
     CXXFLAGS "${L_CXX_FLAGS}"
     DEFINES "${L_DEFINES}"
-    DLL_DEFINES "${L_DLL_DEFINES}"
     )
 
   # Extra static lib specific work

Modified: brlcad/trunk/src/libbrep/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/libbrep/CMakeLists.txt     2020-06-08 08:53:09 UTC (rev 
76066)
+++ brlcad/trunk/src/libbrep/CMakeLists.txt     2020-06-08 15:56:48 UTC (rev 
76067)
@@ -81,15 +81,14 @@
   )
 CMAKEFILES(${libbrep_ignored_files})
 
+BRLCAD_ADDLIB(libbrep "${LIBBREP_SOURCES}" 
"libbg;libbn;libbu;${OPENNURBS_LIBRARIES};${P2T_LIBRARY};${WINSOCK_LIB};${RPCRT_LIB};${STDCXX_LIBRARIES}")
+set_target_properties(libbrep PROPERTIES VERSION 20.0.1 SOVERSION 20)
+
 # Anyone who needs to import libbrep will also need to import openNURBS
 if(HIDE_INTERNAL_SYMBOLS)
-  set_property(GLOBAL APPEND PROPERTY libbrep_DLL_DEFINES "ON_DLL_IMPORTS")
+  set_property(TARGET libbrep APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS 
"ON_DLL_IMPORTS")
 endif(HIDE_INTERNAL_SYMBOLS)
 
-BRLCAD_ADDLIB(libbrep "${LIBBREP_SOURCES}" 
"libbg;libbn;libbu;${OPENNURBS_LIBRARIES};${P2T_LIBRARY};${WINSOCK_LIB};${RPCRT_LIB};${STDCXX_LIBRARIES}")
-
-set_target_properties(libbrep PROPERTIES VERSION 20.0.1 SOVERSION 20)
-
 add_subdirectory(tests)
 
 CMAKEFILES(CMakeLists.txt)

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to