################################################################################# #this function really resolve a dependency, either find something or insert external ################################################################################# function(add_external_package_dir pkg) get_filename_component(Package_source ${CMAKE_SOURCE_DIR}/../../Packages/${pkg} ABSOLUTE) debug_message("WARNING testing for ${pkg} in folder -->${Package_source}<-- ARGV1-->${ARGV1}<--ARGC-->${ARGC}<--") set(ForceBuild OFF) if(ARGC GREATER 1) set(ver ${ARGV1}) if(ARGC GREATER 2) set(ForceBuild ${ARGV2}) endif() else() if(EXISTS ${Package_source}/CMakeLists.txt) debug_message("########### used implicit version ${Package_source}") get_filename_component(ver ${Package_source} NAME) get_filename_component(Package_source ${Package_source} PATH) get_filename_component(pkg ${Package_source} NAME) debug_message("########### used implicit version ${Package_source}/${pkg}/${ver}") else() if(EXISTS ${Package_source}/Default.cmake) include(${Package_source}/Default.cmake) set(ver ${Package_default_version}) else() file(GLOB versions RELATIVE ${Package_source} "${Package_source}/*") foreach(item ${versions}) if(NOT IS_DIRECTORY ${Package_source}/${item}) list(REMOVE_ITEM versions ${item}) else() if(NOT EXISTS ${Package_source}/${item}/CMakeLists.txt) list(REMOVE_ITEM versions ${item}) endif() endif() endforeach() if(versions) list(SORT versions) debug_message("available versions for package ${pkg} in folder -->${Package_source}<-->${versions}") list(GET versions 0 ver) else() message( FATAL_ERROR "package definition -->${Package_source}<-- UNAVAILABLE") endif() endif() endif() endif() list(FIND Package_list ${pkg} pkg_found) if(pkg_found LESS 0 ) if(EXISTS ${Package_source}/${ver}/CMakeLists.txt) debug_message("########### handling package ${pkg} --->${Package_list}<--") unset(mymodulefile CACHE) find_file( mymodulefile NAMES Find${pkg}.cmake ${pkg}Config.cmake PATHS ${CMAKE_MODULE_PATH} ${CMAKE_ROOT}/Modules ) debug_message("mymodulefile-->${mymodulefile}<--") set(my_found 0) if(mymodulefile) get_cmake_property(previous_cache_var CACHE_VARIABLES) #find_package(${pkg} ${Package_search_hints}) string(TOUPPER ${pkg} pkg_upper_name) debug_message("!!!!!!!!!!!!searching -->find_package(${pkg} ${ver} EXACT)<--") find_package(${pkg} ${ver} EXACT) #disable ${Package_search_hints} for packages if(${pkg_upper_name}_FOUND) debug_message(HERE!!!! found -->${pkg}<-- skipping external) set(my_found 1) else() get_cmake_property(current_cache_var CACHE_VARIABLES) list(REMOVE_ITEM current_cache_var ${previous_cache_var}) foreach(v ${current_cache_var}) debug_message("unset cache var ->${v}<-->${${v}}<-") unset(${v} CACHE) endforeach() endif() else() debug_message("NOT FOUND module ->${pkg}<- in files Find${pkg}.cmake ${pkg}Config.cmake in paths ${CMAKE_MODULE_PATH} ${CMAKE_ROOT}/Modules") endif() if(NOT my_found OR ForceBuild ) set(Package_current_dependencies_effective "") set(Package_dependency_file "") if(EXISTS ${Package_source}/${ver}/Depends.cmake) set(Package_dependency_file ${Package_source}/${ver}/Depends.cmake) else() if(EXISTS ${Package_source}/Depends.cmake) set(Package_dependency_file ${Package_source}/Depends.cmake) endif() endif() if(Package_dependency_file) set(Package_current_dependencies "") include(${Package_dependency_file}) debug_message("WARNING!!!!########## handling deps for ${pkg} -->${Package_current_dependencies}<--") foreach(mymodule ${Package_current_dependencies}) add_external_package_dir(${mymodule}) list(FIND Package_list_added ${mymodule} _found) if(NOT _found LESS 0) set(Package_current_dependencies_effective ${Package_current_dependencies_effective} ${mymodule}) endif() endforeach() endif() if(Package_current_dependencies_effective) set(Package_current_dependencies_effective_line DEPENDS ${Package_current_dependencies_effective}) else() set(Package_current_dependencies_effective_line "") endif() debug_message("@@@@@@@@add_subdirectory(${Package_source}/${ver} ${EXTERNAL_ASSEMBLY_BASE_BUILD}/${pkg}) with dep line -->${Package_current_dependencies_effective_line}<--") add_subdirectory(${Package_source}/${ver} ${EXTERNAL_ASSEMBLY_BASE_BUILD}/${pkg}) list(APPEND Package_list_added ${pkg}) endif() endif() list(APPEND Package_list ${pkg}) endif() set(Package_list ${Package_list} PARENT_SCOPE) set(Package_list_added ${Package_list_added} PARENT_SCOPE) endfunction(add_external_package_dir) ################################################################################# #this function get setup variables into package cmakelists when called with the list of used vars ################################################################################# function(PackageSetup ) get_filename_component(Package_Dir ${CMAKE_PARENT_LIST_FILE} PATH) get_filename_component(tmp ${Package_Dir} PATH) get_filename_component(VERSION ${Package_Dir} NAME) get_filename_component(PACKAGE ${tmp} NAME) # set(_f1 -DBUILD_SHARED_LIBS:BOOL=${EXTERNAL_ASSEMBLY_BUILD_SHARED}) # if(NOT EXTERNAL_ASSEMBLY_BUILD_SHARED) #this is to avoid linking errors on AMD64, basically add -fPIC also to static lib buildslike #relocation R_X86_64_32S #see #http://www.cmake.org/pipermail/cmake/2006-September/011316.html #http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3 # if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" ) # set(_f2 -DCMAKE_C_FLAGS:STRING=-fPIC ${CMAKE_C_FLAGS}) # set(_f3 -DCMAKE_CXX_FLAGS:STRING=-fPIC ${CMAKE_CXX_FLAGS}) # endif() # endif() set(list_separator "") set(Package_specific_cmake_args "") set(Package_std_cmake_args -DCMAKE_INSTALL_PREFIX:PATH= ) if(EXTERNAL_ASSEMBLY_INDIVIDUAL_INSTALL_PACKAGE) foreach(dep_package ${Package_list}) list(REMOVE_ITEM CMAKE_PREFIX_PATH ${EXTERNAL_ASSEMBLY_COMMON_PREFIX}/${PACKAGE}) list(APPEND CMAKE_PREFIX_PATH ${EXTERNAL_ASSEMBLY_COMMON_PREFIX}/${PACKAGE}) endforeach() endif() foreach(pass_var ${Package_Pass_Variables}) if(DEFINED ${pass_var}) if(NOT ${pass_var} STREQUAL "") set(pass_var_len 0) set(_tmp ${${pass_var}}) # debug_message("variable -->${pass_var}<-->${_tmp}") list(LENGTH _tmp pass_var_len) # debug_message("length of -->${pass_var}<-->${pass_var_len}") if(pass_var_len GREATER 1) string(REPLACE ";" "@@" managed_list "${_tmp}" ) debug_message("adding variable -->${pass_var}<-as list->${managed_list}") set(list_separator LIST_SEPARATOR @@) set(def_flag -D${pass_var}:CACHE=${managed_list}) else() set(def_flag -D${pass_var}:CACHE=${${pass_var}}) endif() list(APPEND Package_std_cmake_args ${def_flag}) endif() endif() endforeach() # set(Package_std_cmake_args -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_PREFIX_PATH:PATH= -DCMAKE_MODULE_PATH:PATH=${CMAKE_MODULE_PATH} -DCMAKE_DEBUG_POSTFIX:STRING=${CMAKE_DEBUG_POSTFIX} ${_f1} ${_f2} ${_f3}) set(Package_Source_Stamp_Dir ${EXTERNAL_ASSEMBLY_BASE_SOURCE}/${PACKAGE}/${VERSION}/stamp ) set(Package_Source_Dir ${EXTERNAL_ASSEMBLY_BASE_SOURCE}/${PACKAGE}/${VERSION}/src ) set(Package_Download_Dir ${EXTERNAL_ASSEMBLY_BASE_SOURCE}/${PACKAGE}/${VERSION}/download ) file(TO_NATIVE_PATH ${EXTERNAL_ASSEMBLY_BASE_SOURCE}/${PACKAGE}/${VERSION}/src _NATIVE_SOURCE_DIR) file(TO_NATIVE_PATH ${Package_Source_Stamp_Dir} _NATIVE_SRCSTAMP_DIR) file(TO_NATIVE_PATH ${EXTERNAL_ASSEMBLY_BASE_SOURCE}/${PACKAGE}/${VERSION}/download _NATIVE_DOWNLOAD_DIR) set(Package_std_source_dirs SOURCE_DIR ${_NATIVE_SOURCE_DIR} #SRCSTAMP_DIR ${_NATIVE_SRCSTAMP_DIR} DOWNLOAD_DIR ${_NATIVE_DOWNLOAD_DIR} ) file(TO_NATIVE_PATH ${EXTERNAL_ASSEMBLY_BASE_BUILD}/${PACKAGE}/build _NATIVE_BINARY_DIR) if(EXTERNAL_ASSEMBLY_INDIVIDUAL_INSTALL_PACKAGE) file(TO_NATIVE_PATH ${EXTERNAL_ASSEMBLY_COMMON_PREFIX}/${PACKAGE} _NATIVE_INSTALL_DIR) else() file(TO_NATIVE_PATH ${EXTERNAL_ASSEMBLY_COMMON_PREFIX} _NATIVE_INSTALL_DIR) endif() set(Package_std_binary_dirs BINARY_DIR ${_NATIVE_BINARY_DIR} INSTALL_DIR ${_NATIVE_INSTALL_DIR} ) set(Package_std_dirs ${Package_std_source_dirs} ${Package_std_binary_dirs} ${list_separator}) debug_message("Processing Package ${PACKAGE} in-->${Package_Dir}") if(ARGN) set(varlist ${ARGN}) else() set(varlist Package_Dir VERSION PACKAGE Package_std_cmake_args Package_specific_cmake_args Package_Source_Stamp_Dir Package_Source_Dir Package_Download_Dir Package_std_source_dirs Package_std_binary_dirs Package_std_dirs ) debug_message(STATUS "exporting all vars-->${varlist}<--") endif() foreach(var ${varlist}) if(NOT DEFINED ${var}) message(FATAL_ERROR "PackageSetup does not have ${var} Variable ") else() set(${var} "${${var}}" PARENT_SCOPE) endif() endforeach() endfunction(PackageSetup) message("cazzoooooooooo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") function(PackageGetSource) message("cazzoooooooooo") ExternalProject_Add( ${PACKAGE}-GetSource SOURCE_DIR ${Package_Source_Dir} DOWNLOAD_DIR ${Package_Download_Dir} STAMP_DIR ${Package_Source_Stamp_Dir} ${Package_source_setup} UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) if(Package_current_dependencies_effective_line) set( Package_current_dependencies_effective_line ${Package_current_dependencies_effective_line} ${PACKAGE}-GetSource) else() set(Package_current_dependencies_effective_line DEPENDS ${PACKAGE}-GetSource) endif() set(Package_current_dependencies_effective_line ${Package_current_dependencies_effective_line} PARENT_SCOPE) endfunction(PackageGetSource)