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