diff --git a/Tools/CMake/basics.cmake b/Tools/CMake/basics.cmake index 16e7ed27c..7c1df5d8c 100644 --- a/Tools/CMake/basics.cmake +++ b/Tools/CMake/basics.cmake @@ -73,6 +73,53 @@ macro(addLib lib) target_link_libraries(${PROJECT_NAME} "${lib}") endmacro() +# adds a library dependency. Are processed on addExecutable or addStaticLib +macro(addRequiredLibrary lib) + #message(STATUS "${PROJECT_NAME} : add lib : ${lib}") + LIST( APPEND ${PROJECT_NAME}_required_library ${lib} ) +endmacro() + +# adds a link dependency. Are processed on addExecutable or addStaticLib +macro(addRequiredLink lib) + #message(STATUS "${PROJECT_NAME} : add lib : ${lib}") + LIST( APPEND ${PROJECT_NAME}_required_link ${lib} ) +endmacro() + +macro( _processProjectLibrary ) + # Append currect project to PROJECT_STACK + LIST( APPEND PROJECT_STACK "${PROJECT_NAME}" ) + + foreach( lib ${${PROJECT_NAME}_required_library} ) + #message( "adding library dependency: ${lib}" ) + include( ${lib} ) + endforeach() + + #clear required libraries + set( ${PROJECT_NAME}_required_library ) + + # pop currect project form PROJECT_STACK + LIST(REMOVE_AT PROJECT_STACK -1) + + # get currect project form stack + if( PROJECT_STACK ) + LIST(GET PROJECT_STACK -1 TEMP_PROJECT) + project( ${TEMP_PROJECT} ) + endif() + + +endmacro() + +macro( _processProjectLinks ) + #message( "_processProjectLinks: ${PROJECT_NAME}" ) + foreach( lib ${${PROJECT_NAME}_required_link} ) + addLib( ${lib} ) + endforeach() + + #clear required libraries + set( ${PROJECT_NAME}_required_link ) +endmacro() + + # adds a path to search for libs macro(addLibPath dir) link_directories(${dir}) @@ -146,6 +193,9 @@ macro(addStaticLib) #foreach(dir ${${PROJECT_NAME}_paths}) addInclude("${firstDir}") #endforeach() + + _processProjectLinks() + _processProjectLibrary() endmacro() # macro to add an executable @@ -161,6 +211,9 @@ macro(addExecutable) add_executable("${PROJECT_NAME}" WIN32 ${${PROJECT_NAME}_files}) # omg - only use the first folder ... otehrwise we get lots of header name collisions addInclude("${firstDir}") + + _processProjectLinks() + _processProjectLibrary() endmacro() macro(setupVersionNumbers)