99# the content of this library for linking when in debugging
1010#######################################################################################################
1111
12- # VALID_BUILDER_VERSION: used for replacing CMAKE_VERSION (available in v2.6.3 RC9) and VERSION_GREATER/VERSION_LESS (available in 2.6.2 RC4).
13- # This can be replaced by "IF(${CMAKE_VERSION} VERSION_LESS "x.y.z")" from 2.6.4.
14- SET (VALID_BUILDER_VERSION OFF )
15- MACRO (BUILDER_VERSION_GREATER MAJOR_VER MINOR_VER PATCH_VER)
16- SET (VALID_BUILDER_VERSION OFF )
17- IF (CMAKE_MAJOR_VERSION GREATER ${MAJOR_VER} )
18- SET (VALID_BUILDER_VERSION ON )
19- ELSEIF (CMAKE_MAJOR_VERSION EQUAL ${MAJOR_VER} )
20- IF (CMAKE_MINOR_VERSION GREATER ${MINOR_VER} )
21- SET (VALID_BUILDER_VERSION ON )
22- ELSEIF (CMAKE_MINOR_VERSION EQUAL ${MINOR_VER} )
23- IF (CMAKE_PATCH_VERSION GREATER ${PATCH_VER} )
24- SET (VALID_BUILDER_VERSION ON )
25- ENDIF (CMAKE_PATCH_VERSION GREATER ${PATCH_VER} )
26- ENDIF ()
27- ENDIF ()
28- ENDMACRO (BUILDER_VERSION_GREATER MAJOR_VER MINOR_VER PATCH_VER)
29-
30-
31- # CMAKE_VERSION_TEST: Define whether "IF(${CMAKE_VERSION} VERSION_LESS "x.y.z")" can be used or not.
32- BUILDER_VERSION_GREATER(2 8 0)
33- SET (CMAKE_VERSION_TEST ${VALID_BUILDER_VERSION} ) # >= 2.8.0
34-
35- SET (VALID_BUILDER_VERSION OFF )
36-
37-
3812MACRO (LINK_WITH_VARIABLES TRGTNAME)
3913 FOREACH (varname ${ARGN} )
4014 IF (${varname} _DEBUG)
@@ -50,22 +24,7 @@ MACRO(LINK_WITH_VARIABLES TRGTNAME)
5024ENDMACRO (LINK_WITH_VARIABLES TRGTNAME)
5125
5226MACRO (LINK_INTERNAL TRGTNAME)
53- IF (NOT CMAKE24)
54- TARGET_LINK_LIBRARIES (${TRGTNAME} ${ARGN} )
55- ELSE (NOT CMAKE24)
56- FOREACH (LINKLIB ${ARGN} )
57- IF (MSVC AND OSG_MSVC_VERSIONED_DLL)
58- #when using versioned names, the .dll name differ from .lib name, there is a problem with that:
59- #CMake 2.4.7, at least seem to use PREFIX instead of IMPORT_PREFIX for computing linkage info to use into projects,
60- # so we full path name to specify linkage, this prevent automatic inferencing of dependencies, so we add explicit depemdencies
61- #to library targets used
62- TARGET_LINK_LIBRARIES (${TRGTNAME} optimized "${OUTPUT_LIBDIR} /${LINKLIB}${CMAKE_RELEASE_POSTFIX} .lib" debug "${OUTPUT_LIBDIR} /${LINKLIB}${CMAKE_DEBUG_POSTFIX} .lib" )
63- ADD_DEPENDENCIES (${TRGTNAME} ${LINKLIB} )
64- ELSE (MSVC AND OSG_MSVC_VERSIONED_DLL)
65- TARGET_LINK_LIBRARIES (${TRGTNAME} optimized "${LINKLIB}${CMAKE_RELEASE_POSTFIX} " debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX} " )
66- ENDIF (MSVC AND OSG_MSVC_VERSIONED_DLL)
67- ENDFOREACH (LINKLIB)
68- ENDIF (NOT CMAKE24)
27+ TARGET_LINK_LIBRARIES (${TRGTNAME} ${ARGN} )
6928ENDMACRO (LINK_INTERNAL TRGTNAME)
7029
7130MACRO (LINK_EXTERNAL TRGTNAME)
@@ -161,39 +120,29 @@ ENDMACRO(SETUP_LINK_LIBRARIES)
161120
162121# Sets the output directory property for CMake >= 2.6.0, giving an output path RELATIVE to default one
163122MACRO (SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
164- BUILDER_VERSION_GREATER(2 8 0)
165- IF (NOT VALID_BUILDER_VERSION)
166- # If CMake <= 2.8.0 (Testing CMAKE_VERSION is possible in >= 2.6.4)
167- IF (MSVC_IDE )
168- # Using the "prefix" hack
169- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES PREFIX "../${RELATIVE_OUTDIR} /" )
170- ELSE (MSVC_IDE )
171- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES PREFIX "${RELATIVE_OUTDIR} /" )
172- ENDIF (MSVC_IDE )
173- ELSE (NOT VALID_BUILDER_VERSION)
174- # Using the output directory properties
175-
176- # Global properties (All generators but VS & Xcode)
177- FILE (TO_CMAKE_PATH TMPVAR "CMAKE_ARCHIVE_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR} " )
178- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${TMPVAR} " )
179- FILE (TO_CMAKE_PATH TMPVAR "CMAKE_RUNTIME_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR} " )
180- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TMPVAR} " )
181- FILE (TO_CMAKE_PATH TMPVAR "CMAKE_LIBRARY_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR} " )
182- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TMPVAR} " )
183-
184- # Per-configuration property (VS, Xcode)
185- FOREACH (CONF ${CMAKE_CONFIGURATION_TYPES} ) # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses)
186- STRING (TOUPPER "${CONF} " CONF) # Go uppercase (DEBUG, RELEASE...)
187-
188- # We use "FILE(TO_CMAKE_PATH", to create nice looking paths
189- FILE (TO_CMAKE_PATH "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF} }/${RELATIVE_OUTDIR} " TMPVAR)
190- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES "ARCHIVE_OUTPUT_DIRECTORY_${CONF} " "${TMPVAR} " )
191- FILE (TO_CMAKE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF} }/${RELATIVE_OUTDIR} " TMPVAR)
192- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES "RUNTIME_OUTPUT_DIRECTORY_${CONF} " "${TMPVAR} " )
193- FILE (TO_CMAKE_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF} }/${RELATIVE_OUTDIR} " TMPVAR)
194- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES "LIBRARY_OUTPUT_DIRECTORY_${CONF} " "${TMPVAR} " )
195- ENDFOREACH (CONF ${CMAKE_CONFIGURATION_TYPES} )
196- ENDIF (NOT VALID_BUILDER_VERSION)
123+
124+ # Using the output directory properties
125+
126+ # Global properties (All generators but VS & Xcode)
127+ FILE (TO_CMAKE_PATH TMPVAR "CMAKE_ARCHIVE_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR} " )
128+ SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${TMPVAR} " )
129+ FILE (TO_CMAKE_PATH TMPVAR "CMAKE_RUNTIME_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR} " )
130+ SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TMPVAR} " )
131+ FILE (TO_CMAKE_PATH TMPVAR "CMAKE_LIBRARY_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR} " )
132+ SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TMPVAR} " )
133+
134+ # Per-configuration property (VS, Xcode)
135+ FOREACH (CONF ${CMAKE_CONFIGURATION_TYPES} ) # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses)
136+ STRING (TOUPPER "${CONF} " CONF) # Go uppercase (DEBUG, RELEASE...)
137+
138+ # We use "FILE(TO_CMAKE_PATH", to create nice looking paths
139+ FILE (TO_CMAKE_PATH "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF} }/${RELATIVE_OUTDIR} " TMPVAR)
140+ SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES "ARCHIVE_OUTPUT_DIRECTORY_${CONF} " "${TMPVAR} " )
141+ FILE (TO_CMAKE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF} }/${RELATIVE_OUTDIR} " TMPVAR)
142+ SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES "RUNTIME_OUTPUT_DIRECTORY_${CONF} " "${TMPVAR} " )
143+ FILE (TO_CMAKE_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF} }/${RELATIVE_OUTDIR} " TMPVAR)
144+ SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES "LIBRARY_OUTPUT_DIRECTORY_${CONF} " "${TMPVAR} " )
145+ ENDFOREACH (CONF ${CMAKE_CONFIGURATION_TYPES} )
197146ENDMACRO (SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
198147
199148
@@ -302,34 +251,7 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
302251 ENDIF (DYNAMIC_OPENSCENEGRAPH)
303252
304253 IF (MSVC )
305- IF (NOT CMAKE24)
306- SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "${OSG_PLUGINS} " ) # Sets the ouput to be /osgPlugin-X.X.X ; also ensures the /Debug /Release are removed
307- ELSE (NOT CMAKE24)
308-
309- IF (OSG_MSVC_VERSIONED_DLL)
310-
311- #this is a hack... the build place is set to lib/<debug or release> by LIBARARY_OUTPUT_PATH equal to OUTPUT_LIBDIR
312- #the .lib will be crated in ../ so going straight in lib by the IMPORT_PREFIX property
313- #because we want dll placed in OUTPUT_BINDIR ie the bin folder sibling of lib, we can use ../../bin to go there,
314- #it is hardcoded, we should compute OUTPUT_BINDIR position relative to OUTPUT_LIBDIR ... to be implemented
315- #changing bin to something else breaks this hack
316- #the dll are placed in bin/${OSG_PLUGINS}
317-
318- IF (NOT MSVC_IDE )
319- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES PREFIX "../bin/${OSG_PLUGINS} /" )
320- ELSE (NOT MSVC_IDE )
321- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES PREFIX "../../bin/${OSG_PLUGINS} /" IMPORT_PREFIX "../" )
322- ENDIF (NOT MSVC_IDE )
323-
324- ELSE (OSG_MSVC_VERSIONED_DLL)
325-
326- #in standard mode (unversioned) the .lib and .dll are placed in lib/<debug or release>/${OSG_PLUGINS}.
327- #here the PREFIX property has been used, the same result would be accomplidhe by prepending ${OSG_PLUGINS}/ to OUTPUT_NAME target property
328-
329- SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES PREFIX "${OSG_PLUGINS} /" )
330- ENDIF (OSG_MSVC_VERSIONED_DLL)
331-
332- ENDIF (NOT CMAKE24)
254+ SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "${OSG_PLUGINS} " ) # Sets the ouput to be /osgPlugin-X.X.X ; also ensures the /Debug /Release are removed
333255 ENDIF (MSVC )
334256
335257 SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL} " )
@@ -433,6 +355,14 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
433355 ENDIF ()
434356 ENDIF ()
435357
358+ IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND DYNAMIC_OPENSCENEGRAPH)
359+ # templated types used in OSG plugins and applications need to get the same type ID
360+ # based on investigation for https://gitlab.com/OpenMW/openmw/-/issues/8039 by the OpenMW team, this is believed to only be necessary for Clang on Linux
361+ # i.e. not for GCC anywhere, MSVC on Windows or for AppleClang on MacOS
362+ # it's possible that this is really required by the C++ spec for all platforms and we're just getting away with it everywhere else
363+ SET_TARGET_PROPERTIES (${TARGET_TARGETNAME} PROPERTIES ENABLE_EXPORTS ON )
364+ ENDIF ()
365+
436366 SETUP_LINK_LIBRARIES()
437367
438368ENDMACRO (SETUP_EXE)
@@ -457,7 +387,7 @@ MACRO(SETUP_APPLICATION APPLICATION_NAME)
457387 ELSE (APPLE )
458388 INSTALL (TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin COMPONENT openscenegraph )
459389 IF (MSVC )
460- INSTALL (FILES $<TARGET_PDB_FILE:${TARGET_NAME } > DESTINATION bin COMPONENT openscenegraph)
390+ INSTALL (FILES $<TARGET_PDB_FILE:${TARGET_TARGETNAME } > DESTINATION bin COMPONENT openscenegraph)
461391 ENDIF (MSVC )
462392 ENDIF (APPLE )
463393
@@ -489,7 +419,7 @@ MACRO(SETUP_EXAMPLE EXAMPLE_NAME)
489419 ELSE (APPLE )
490420 INSTALL (TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples )
491421 IF (MSVC )
492- INSTALL (FILES $<TARGET_PDB_FILE:${TARGET_NAME } > DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples)
422+ INSTALL (FILES $<TARGET_PDB_FILE:${TARGET_TARGETNAME } > DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples)
493423 ENDIF (MSVC )
494424 ENDIF (APPLE )
495425
@@ -527,38 +457,9 @@ MACRO(HANDLE_MSVC_DLL)
527457
528458 SET_OUTPUT_DIR_PROPERTY_260(${LIB_NAME} "" ) # Ensure the /Debug /Release are removed
529459 IF (NOT MSVC_IDE )
530- IF (NOT CMAKE24)
531- BUILDER_VERSION_GREATER(2 8 0)
532- IF (NOT VALID_BUILDER_VERSION)
533- # If CMake < 2.8.1
534- SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION} -" IMPORT_PREFIX "../" )
535- ELSE (NOT VALID_BUILDER_VERSION)
536- SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION} -" )
537- ENDIF (NOT VALID_BUILDER_VERSION)
538- ELSE (NOT CMAKE24)
539- SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION} -" IMPORT_PREFIX "../" )
540- SET (NEW_LIB_NAME "${OUTPUT_BINDIR} /${LIB_PREFIX}${LIB_SOVERSION} -${LIB_NAME} " )
541- ADD_CUSTOM_COMMAND (
542- TARGET ${LIB_NAME}
543- POST_BUILD
544- COMMAND ${CMAKE_COMMAND} -E copy "${NEW_LIB_NAME} .lib" "${OUTPUT_LIBDIR} /${LIB_NAME} .lib"
545- COMMAND ${CMAKE_COMMAND} -E copy "${NEW_LIB_NAME} .exp" "${OUTPUT_LIBDIR} /${LIB_NAME} .exp"
546- COMMAND ${CMAKE_COMMAND} -E remove "${NEW_LIB_NAME} .lib"
547- COMMAND ${CMAKE_COMMAND} -E remove "${NEW_LIB_NAME} .exp"
548- )
549- ENDIF (NOT CMAKE24)
460+ SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION} -" )
550461 ELSE (NOT MSVC_IDE )
551- IF (NOT CMAKE24)
552- BUILDER_VERSION_GREATER(2 8 0)
553- IF (NOT VALID_BUILDER_VERSION)
554- # If CMake < 2.8.1
555- SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION} -" IMPORT_PREFIX "../" )
556- ELSE (NOT VALID_BUILDER_VERSION)
557- SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION} -" )
558- ENDIF (NOT VALID_BUILDER_VERSION)
559- ELSE (NOT CMAKE24)
560- SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION} -" IMPORT_PREFIX "../" )
561- ENDIF (NOT CMAKE24)
462+ SET_TARGET_PROPERTIES (${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION} -" )
562463 ENDIF (NOT MSVC_IDE )
563464
564465# SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/osg${OPENSCENEGRAPH_SOVERSION}-")
0 commit comments