1############################################################################# 2# $Id: CMake.NCBIptb.cmake 620014 2020-11-13 18:30:31Z gouriano $ 3############################################################################# 4############################################################################# 5## 6## NCBI CMake wrapper 7## Author: Andrei Gourianov, gouriano@ncbi 8## 9##--------------------------------------------------------------------------- 10## in CMakeLists.txt: 11## NCBI_add_subdirectory( list of subdirectories) 12## NCBI_add_library( list of libraries) 13## NCBI_add_app( list of apps) 14##--------------------------------------------------------------------------- 15## the following calls in CMakeLists.txt affect all projects in current dir and all subdirs 16## NCBI_headers( list of headers) 17## NCBI_disable_pch() / NCBI_enable_pch() 18## NCBI_requires( list of components) 19## NCBI_optional_components( list of components) 20## NCBI_add_definitions( list of compiler definitions) 21## NCBI_add_include_directories( list of directories) 22## NCBI_uses_toolkit_libraries( list of libraries) 23## NCBI_uses_external_libraries( list of libraries) 24## NCBI_project_tags(list of tags) 25## 26##--------------------------------------------------------------------------- 27## in CMakeLists.xxx.[lib|app].txt - all calls affect current project only 28## NCBI_begin_lib(name) or NCBI_begin_app(name) 29## 30## NCBI_sources( list of source files) 31## NCBI_generated_sources( list of source files) - file extension is mandatory 32## NCBI_headers( list of header files) - only relative paths and masks are allowed 33## NCBI_resources( list of resource files) - file extension is mandatory 34## NCBI_dataspecs( list of data specs - ASN, DTD, XSD etc) - file extension is mandatory 35## 36## NCBI_requires( list of components) 37## NCBI_optional_components( list of components) 38## 39## NCBI_enable_pch() / NCBI_disable_pch() - no arguments 40## NCBI_disable_pch_for( list of source files) 41## NCBI_set_pch_header( header file) 42## NCBI_set_pch_define( macro to define) 43## 44## NCBI_uses_toolkit_libraries( list of libraries) 45## NCBI_uses_external_libraries( list of libraries) 46## NCBI_add_definitions( list of compiler definitions) 47## NCBI_add_include_directories( list of directories) 48## 49## NCBI_hosts_projects(list of parts) - used to assemble composite shared libraries 50## 51## NCBI_set_property(property value) 52## NCBI_project_tags( list of tags) 53## NCBI_project_watchers( list of watchers) 54## 55## Testing: 56## short form 57## NCBI_add_test( test command) - empty command means run the app with no arguments 58## long form 59## NCBI_begin_test(name) - name is optional 60## NCBI_set_test_command(command, maybe with arguments) 61## OR NCBI_set_test_arguments(arguments only) 62## NCBI_set_test_assets(list of assets) - required files and directories 63## NCBI_set_test_timeout(seconds) 64## NCBI_set_test_requires(list of components) 65## NCBI_set_test_resources(list of test resources) 66## NCBI_set_test_labels(list of labels) 67## NCBI_end_test() 68## 69## NCBI_end_lib(result) or NCBI_end_app(result) - argument 'result' is optional 70## 71##--------------------------------------------------------------------------- 72## custom targets 73## in CMakeLists.txt: 74## NCBI_add_target( list of targets) 75## 76## in CMakeLists.xxx.txt - add function which defines target, then add target: 77## function(xxx_definition) - the function name must be unique 78## ... 79## add_custom_target(name ...) - the same name as in NCBI_begin_custom_target 80## endfunction() 81## 82## NCBI_begin_custom_target(name) 83## NCBI_requires( list of components) 84## NCBI_custom_target_dependencies(list of toolkit libraries or apps) 85## NCBI_custom_target_definition( xxx_definition) - function name defined above 86## NCBI_end_custom_target(result) - argument 'result' is optional 87## 88##--------------------------------------------------------------------------- 89## extensions 90## NCBI_register_hook(event callback_function) 91## events: 92## TARGET_PARSED - a project is parsed 93## ALL_PARSED - all projects in the source tree are parsed 94## COLLECTED - all build targets are collected 95## TARGET_ADDED - build target is added 96## ALL_ADDED - all targets are added 97## DATASPEC - process data specification 98## 99############################################################################# 100 101 102############################################################################# 103# deprecated 104macro(NCBI_add_root_subdirectory) 105 message(WARNING "NCBI_add_root_subdirectory is deprecated, use NCBI_add_subdirectory instead") 106 NCBI_add_subdirectory(${ARGV}) 107endmacro() 108 109############################################################################# 110function(NCBI_add_subdirectory) 111 if(NCBI_PTBMODE_PARTS) 112 return() 113 endif() 114 115 if(NOT DEFINED NCBI_CURRENT_SOURCE_DIR) 116 set(NCBI_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 117 endif() 118 if("${NCBI_CURRENT_SOURCE_DIR}" STREQUAL "${NCBITK_SRC_ROOT}") 119 set(NCBI_TREE_ROOT ${NCBITK_TREE_ROOT}) 120 set(NCBI_SRC_ROOT ${NCBITK_SRC_ROOT}) 121 set(NCBI_INC_ROOT ${NCBITK_INC_ROOT}) 122 elseif("${NCBI_CURRENT_SOURCE_DIR}" STREQUAL "${NCBITK_TREE_ROOT}") 123 set(NCBI_TREE_ROOT ${NCBITK_TREE_ROOT}) 124 set(NCBI_SRC_ROOT ${NCBITK_TREE_ROOT}) 125 set(NCBI_INC_ROOT ${NCBITK_TREE_ROOT}) 126 endif() 127 128 if(NOT NCBI_PTB_HAS_ROOT) 129 NCBI_internal_analyze_tree() 130 endif() 131 132 if(NCBI_PTBMODE_COLLECT_DEPS) 133 set(_curdir ${NCBI_CURRENT_SOURCE_DIR}) 134 foreach(_sub IN LISTS ARGV) 135 if (EXISTS "${_curdir}/${_sub}/CMakeLists.txt") 136 set(NCBI_CURRENT_SOURCE_DIR ${_curdir}/${_sub}) 137 NCBI_internal_include("${_curdir}/${_sub}/CMakeLists.txt") 138 else() 139 message("WARNING: directory not found: ${_curdir}/${_sub}") 140 endif() 141 endforeach() 142 else() 143 foreach(_sub IN LISTS ARGV) 144 set(NCBI_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${_sub}) 145 if(DEFINED NCBI_PTB_ALLOWED_DIRS) 146 set(_is_good FALSE) 147 foreach(_dir IN LISTS NCBI_PTB_ALLOWED_DIRS) 148 string(FIND ${_dir} ${NCBI_CURRENT_SOURCE_DIR} _pos) 149 if(${_pos} EQUAL 0) 150 set(_is_good TRUE) 151 break() 152 endif() 153 endforeach() 154 else() 155 NCBI_internal_process_project_filters( _is_good) 156 if(NOT _is_good) 157 if(NOT "${NCBI_PTBCFG_PROJECT_LIST}" STREQUAL "") 158 foreach(_dir IN LISTS NCBI_PTBCFG_PROJECT_LIST) 159 string(FIND "${NCBI_SRC_ROOT}/${_dir}" "${NCBI_CURRENT_SOURCE_DIR}" _pos) 160 if(${_pos} EQUAL 0) 161 set(_is_good TRUE) 162 break() 163 endif() 164 endforeach() 165 endif() 166 endif() 167 endif() 168 if (_is_good AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_sub}/CMakeLists.txt") 169 add_subdirectory(${_sub}) 170 endif() 171 endforeach() 172 endif() 173endfunction() 174 175############################################################################# 176function(NCBI_add_library) 177 if(NCBI_PTBMODE_PARTS) 178 return() 179 endif() 180 if(NOT NCBI_PTBMODE_COLLECT_DEPS) 181 set(NCBI_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 182 endif() 183 set(NCBI_PROJECT_expected library) 184 foreach(_lib IN LISTS ARGV) 185 if (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_lib}.lib.txt) 186 NCBI_internal_include(${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_lib}.lib.txt) 187 elseif (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_lib}.asn.txt) 188 NCBI_internal_include(${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_lib}.asn.txt) 189 elseif (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/${_lib} AND NOT IS_DIRECTORY ${NCBI_CURRENT_SOURCE_DIR}/${_lib}) 190 NCBI_internal_include(${NCBI_CURRENT_SOURCE_DIR}/${_lib}) 191 else() 192 message("WARNING: Library project not found: ${_lib} (${NCBI_CURRENT_SOURCE_DIR})") 193 endif() 194 endforeach() 195 unset(NCBI_PROJECT_expected) 196endfunction() 197 198############################################################################# 199function(NCBI_add_app) 200 if(NCBI_PTBMODE_PARTS) 201 return() 202 endif() 203 if(NOT NCBI_PTBMODE_COLLECT_DEPS) 204 set(NCBI_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 205 endif() 206 set(NCBI_PROJECT_expected app) 207 foreach(_app IN LISTS ARGV) 208 if (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_app}.app.txt) 209 NCBI_internal_include(${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_app}.app.txt) 210 elseif (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/${_app} AND NOT IS_DIRECTORY ${NCBI_CURRENT_SOURCE_DIR}/${_app}) 211 NCBI_internal_include(${NCBI_CURRENT_SOURCE_DIR}/${_app}) 212 else() 213 message("WARNING: App project not found: ${_app} (${NCBI_CURRENT_SOURCE_DIR})") 214 endif() 215 endforeach() 216 unset(NCBI_PROJECT_expected) 217endfunction() 218 219############################################################################# 220function(NCBI_add_target) 221 if(NCBI_PTBMODE_PARTS) 222 return() 223 endif() 224 if(NOT NCBI_PTBMODE_COLLECT_DEPS) 225 set(NCBI_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 226 endif() 227 foreach(_prj IN LISTS ARGV) 228 if (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_prj}.txt) 229 NCBI_internal_include(${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.${_prj}.txt) 230 elseif (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/${_prj} AND NOT IS_DIRECTORY ${NCBI_CURRENT_SOURCE_DIR}/${_prj}) 231 NCBI_internal_include(${NCBI_CURRENT_SOURCE_DIR}/${_prj}) 232 else() 233 message("WARNING: Target not found: ${_prj} (${NCBI_CURRENT_SOURCE_DIR})") 234 endif() 235 endforeach() 236endfunction() 237 238############################################################################# 239macro(NCBI_begin_lib _name) 240 if( NOT NCBI_PTBMODE_PARTS AND NOT "${NCBI_PROJECT_expected}" STREQUAL "" AND NOT "${NCBI_PROJECT_expected}" STREQUAL "library") 241 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unexpected NCBI_begin_lib call") 242 endif() 243 if(NCBI_PTBMODE_PARTS) 244 set(_libname ${_name}.part) 245 else() 246 set(_libname ${_name}) 247 endif() 248 if (DEFINED NCBI_EXTERNAL_TREE_ROOT AND TARGET ${_name}) 249 set(_libname ${_libname}.local) 250 if (NCBI_PTBMODE_COLLECT_DEPS) 251 set_property(GLOBAL PROPERTY NCBI_PTBPROP_LOCAL_${_name} "${_libname}") 252 message(STATUS "Imported target ${_name} will be replaced with local ${_libname} (${NCBI_CURRENT_SOURCE_DIR})") 253 endif() 254 endif() 255 set(NCBI_PROJECT_lib ${_libname}) 256 set(NCBI_PROJECT ${_libname}) 257 set(NCBI_${NCBI_PROJECT}_OUTPUT ${_name}) 258 if ("${ARGC}" GREATER "1") 259 if (NOT "${ARGV1}" STREQUAL "STATIC" AND NOT "${ARGV1}" STREQUAL "SHARED") 260 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unsupported lib type: ${ARGV1}") 261 endif() 262 if(BUILD_SHARED_LIBS) 263 set(NCBI_${NCBI_PROJECT}_TYPE ${ARGV1}) 264 else() 265 set(NCBI_${NCBI_PROJECT}_TYPE STATIC) 266 endif() 267 else() 268 if(BUILD_SHARED_LIBS) 269 if(WIN32 OR XCODE) 270 set(NCBI_${NCBI_PROJECT}_TYPE STATIC) 271 else() 272 set(NCBI_${NCBI_PROJECT}_TYPE SHARED) 273 endif() 274 else() 275 set(NCBI_${NCBI_PROJECT}_TYPE STATIC) 276 endif() 277 endif() 278 set(NCBI_PROJECT_PARTNAME ${_name}) 279 set(NCBI_PROJECT_ID ${_name}.${NCBI_${NCBI_PROJECT}_TYPE}) 280endmacro() 281 282############################################################################# 283macro(NCBI_end_lib) 284 if(NOT DEFINED NCBI_PROJECT_lib) 285 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unexpected NCBI_end_lib call") 286 endif() 287 NCBI_internal_add_project(${ARGV}) 288 unset(NCBI_PROJECT) 289endmacro() 290 291############################################################################# 292macro(NCBI_begin_app _name) 293 if( NOT NCBI_PTBMODE_PARTS AND NOT "${NCBI_PROJECT_expected}" STREQUAL "" AND NOT "${NCBI_PROJECT_expected}" STREQUAL "app") 294 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unexpected NCBI_begin_app call") 295 endif() 296 if(NCBI_PTBMODE_PARTS) 297 set(_appname ${_name}.part) 298 else() 299 set(_appname ${_name}) 300 endif() 301 if (DEFINED NCBI_EXTERNAL_TREE_ROOT AND TARGET ${_name}) 302 set(_appname ${_appname}.local) 303 if (NCBI_PTBMODE_COLLECT_DEPS) 304 set_property(GLOBAL PROPERTY NCBI_PTBPROP_LOCAL_${_name} "${_appname}") 305 message(STATUS "Imported target ${_name} will be replaced with local ${_appname} (${NCBI_CURRENT_SOURCE_DIR})") 306 endif() 307 endif() 308 set(NCBI_PROJECT_app ${_appname}) 309 if (NOT DEFINED NCBI_EXTERNAL_TREE_ROOT) 310 get_property(_dir GLOBAL PROPERTY NCBI_PTBPROP_DIR_${_name}) 311 if (NOT ${_dir} STREQUAL "") 312 if (NCBI_PTBMODE_COLLECT_DEPS OR TARGET ${_name}) 313 set(_appname ${_appname}-app) 314 endif() 315 elseif(NOT NCBI_PTBCFG_ENABLE_COLLECTOR) 316 if (TARGET ${_name}) 317 set(_appname ${_appname}-app) 318 endif() 319 endif() 320 endif() 321 set(NCBI_PROJECT ${_appname}) 322 set(NCBI_${NCBI_PROJECT}_OUTPUT ${_name}) 323 if ("${ARGC}" GREATER "1") 324 if ("${ARGV1}" STREQUAL "GUI") 325 set(NCBI_${NCBI_PROJECT}_TYPE GUIAPP) 326 elseif ("${ARGV1}" STREQUAL "CONSOLE") 327 set(NCBI_${NCBI_PROJECT}_TYPE CONSOLEAPP) 328 else() 329 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unsupported app type: ${ARGV1}") 330 endif() 331 else() 332 set(NCBI_${NCBI_PROJECT}_TYPE CONSOLEAPP) 333 endif() 334 set(NCBI_PROJECT_PARTNAME ${_name}) 335 set(NCBI_PROJECT_ID ${_name}.${NCBI_${NCBI_PROJECT}_TYPE}) 336endmacro() 337 338############################################################################# 339macro(NCBI_end_app) 340 if(NOT DEFINED NCBI_PROJECT_app) 341 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unexpected NCBI_end_app call") 342 endif() 343 NCBI_internal_add_project(${ARGV}) 344 unset(NCBI_PROJECT) 345endmacro() 346 347############################################################################# 348macro(NCBI_begin_custom_target _name) 349 set(NCBI_PROJECT_custom ${_name}) 350 set(NCBI_PROJECT ${_name}) 351 set(NCBI_${NCBI_PROJECT}_TYPE CUSTOM) 352 set(NCBI_PROJECT_ID ${_name}.${NCBI_${NCBI_PROJECT}_TYPE}) 353endmacro() 354 355############################################################################# 356macro(NCBI_end_custom_target) 357 if(NOT DEFINED NCBI_PROJECT_custom) 358 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unexpected NCBI_end_custom_target call") 359 endif() 360 if(NOT DEFINED NCBI_${NCBI_PROJECT}_DEFINITION) 361 message(FATAL_ERROR "${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}): Custom project definition not provided") 362 endif() 363 NCBI_internal_add_project(${ARGV}) 364 unset(NCBI_PROJECT) 365endmacro() 366 367############################################################################# 368macro(NCBI_custom_target_definition _def) 369 set(NCBI_${NCBI_PROJECT}_DEFINITION ${_def}) 370endmacro() 371 372############################################################################# 373macro(NCBI_custom_target_dependencies) 374 set(NCBI_${NCBI_PROJECT}_NCBILIB ${NCBI_${NCBI_PROJECT}_NCBILIB} "${ARGV}") 375endmacro() 376 377############################################################################# 378macro(NCBI_sources) 379 set(NCBI_${NCBI_PROJECT}_SOURCES ${NCBI_${NCBI_PROJECT}_SOURCES} "${ARGV}") 380endmacro() 381macro(NCBI_generated_sources) 382 set(NCBI_${NCBI_PROJECT}_GENERATED_SOURCES ${NCBI_${NCBI_PROJECT}_GENERATED_SOURCES} "${ARGV}") 383endmacro() 384 385############################################################################# 386macro(NCBI_headers) 387 set(NCBI_${NCBI_PROJECT}_HEADERS ${NCBI_${NCBI_PROJECT}_HEADERS} "${ARGV}") 388endmacro() 389 390############################################################################# 391macro(NCBI_resources) 392 set(NCBI_${NCBI_PROJECT}_RESOURCES ${NCBI_${NCBI_PROJECT}_RESOURCES} "${ARGV}") 393endmacro() 394 395############################################################################# 396macro(NCBI_dataspecs) 397 set(NCBI_${NCBI_PROJECT}_DATASPEC ${NCBI_${NCBI_PROJECT}_DATASPEC} "${ARGV}") 398endmacro() 399 400############################################################################# 401macro(NCBI_hosts_projects) 402 set(NCBI_${NCBI_PROJECT}_PARTS ${NCBI_${NCBI_PROJECT}_PARTS} "${ARGV}") 403 if(NOT DEFINED NCBI_PROJECT_ID_COMPOSITE) 404 set(NCBI_PROJECT_ID_COMPOSITE ${NCBI_PROJECT_ID}) 405 set(NCBI_PROJECT_ID ${NCBI_PROJECT_ID}.COMPOSITE) 406 endif() 407endmacro() 408 409macro(NCBI_hosts_virtual_projects) 410 set(NCBI_${NCBI_PROJECT}_VIRTPARTS ${NCBI_${NCBI_PROJECT}_VIRTPARTS} "${ARGV}") 411endmacro() 412 413############################################################################# 414macro(NCBI_requires) 415 set(NCBI_${NCBI_PROJECT}_REQUIRES ${NCBI_${NCBI_PROJECT}_REQUIRES} "${ARGV}") 416endmacro() 417 418############################################################################# 419macro(NCBI_optional_components) 420 set(NCBI_${NCBI_PROJECT}_COMPONENTS ${NCBI_${NCBI_PROJECT}_COMPONENTS} "${ARGV}") 421endmacro() 422 423############################################################################# 424macro(NCBI_enable_pch) 425 set(NCBI_${NCBI_PROJECT}_USEPCH ${NCBI_DEFAULT_USEPCH}) 426endmacro() 427macro(NCBI_disable_pch) 428 set(NCBI_${NCBI_PROJECT}_USEPCH OFF) 429endmacro() 430 431############################################################################# 432macro(NCBI_disable_pch_for) 433 set(NCBI_${NCBI_PROJECT}_NOPCH ${NCBI_${NCBI_PROJECT}_NOPCH} "${ARGV}") 434endmacro() 435 436############################################################################# 437macro(NCBI_set_pch_header) 438 set(NCBI_${NCBI_PROJECT}_PCH "${ARGV}") 439endmacro() 440 441############################################################################# 442macro(NCBI_set_pch_define) 443 set(NCBI_${NCBI_PROJECT}_PCH_DEFINE "${ARGV}") 444endmacro() 445 446############################################################################# 447macro(NCBI_set_dllentry) 448 set(NCBI_${NCBI_PROJECT}_DLLENTRY "${ARGV}") 449endmacro() 450 451############################################################################# 452macro(NCBI_set_guientry) 453 set(NCBI_${NCBI_PROJECT}_GUIENTRY "${ARGV}") 454endmacro() 455 456############################################################################# 457macro(NCBI_uses_toolkit_libraries) 458 set(NCBI_${NCBI_PROJECT}_NCBILIB ${NCBI_${NCBI_PROJECT}_NCBILIB} "${ARGV}") 459endmacro() 460 461############################################################################# 462macro(NCBI_uses_external_libraries) 463 set(NCBI_${NCBI_PROJECT}_EXTLIB ${NCBI_${NCBI_PROJECT}_EXTLIB} "${ARGV}") 464endmacro() 465 466############################################################################# 467macro(NCBI_add_include_directories) 468 set(NCBI_${NCBI_PROJECT}_INCLUDES ${NCBI_${NCBI_PROJECT}_INCLUDES} "${ARGV}") 469endmacro() 470 471############################################################################# 472macro(NCBI_add_definitions) 473 set(NCBI_${NCBI_PROJECT}_DEFINES ${NCBI_${NCBI_PROJECT}_DEFINES} "${ARGV}") 474endmacro() 475 476############################################################################# 477macro(NCBI_set_property _property _value) 478 set(NCBI_${NCBI_PROJECT}_PROPERTY_${_property} ${_value}) 479endmacro() 480 481############################################################################# 482macro(NCBI_project_tags) 483 set(NCBI_${NCBI_PROJECT}_PROJTAG ${NCBI_${NCBI_PROJECT}_PROJTAG} "${ARGV}") 484endmacro() 485 486############################################################################# 487macro(NCBI_project_watchers) 488 set(NCBI_${NCBI_PROJECT}_WATCHER ${NCBI_${NCBI_PROJECT}_WATCHER} "${ARGV}") 489endmacro() 490 491############################################################################# 492############################################################################# 493############################################################################# 494macro(NCBI_begin_test) 495 if(DEFINED NCBI_${NCBI_PROJECT}_TEST) 496 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}: Unexpected NCBI_begin_test call") 497 endif() 498 if (DEFINED NCBITEST_${NCBI_PROJECT}_NUM) 499 math(EXPR NCBITEST_${NCBI_PROJECT}_NUM "${NCBITEST_${NCBI_PROJECT}_NUM} + 1") 500 endif() 501 set(_testalias "") 502 if ("${ARGC}" GREATER "0") 503 set(_testname "${ARGV}") 504 set(_testalias "${_testname}") 505 if ( "${_testname}" STREQUAL "") 506 set(_testname "${NCBI_PROJECT}${NCBITEST_${NCBI_PROJECT}_NUM}") 507 endif() 508 else() 509 set(_testname "${NCBI_PROJECT}${NCBITEST_${NCBI_PROJECT}_NUM}") 510 endif() 511 set(NCBI_${NCBI_PROJECT}_TEST "${_testname}") 512 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_TESTALIAS "${_testalias}") 513 if (NOT DEFINED NCBITEST_${NCBI_PROJECT}_NUM) 514 set(NCBITEST_${NCBI_PROJECT}_NUM "1") 515 endif() 516endmacro() 517 518############################################################################## 519macro(NCBI_set_test_command) 520 set( _args ${ARGV}) 521 list(GET _args 0 _cmd) 522 list(REMOVE_AT _args 0) 523 if ( "${_cmd}" STREQUAL "${NCBI_PROJECT}") 524 set(_cmd "${NCBI_${NCBI_PROJECT}_OUTPUT}") 525 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "CONSOLEAPP" OR ${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "GUIAPP") 526 set(_cmd "${_cmd}${CMAKE_EXECUTABLE_SUFFIX}") 527 endif() 528 endif() 529 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_CMD "${_cmd}") 530 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_ARG "${_args}") 531endmacro() 532 533############################################################################## 534macro(NCBI_set_test_arguments) 535 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_ARG "${ARGV}") 536endmacro() 537 538############################################################################## 539macro(NCBI_set_test_assets) 540 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_ASSETS "${ARGV}") 541endmacro() 542 543############################################################################## 544macro(NCBI_set_test_timeout) 545 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_TIMEOUT "${ARGV}") 546endmacro() 547 548############################################################################## 549macro(NCBI_set_test_requires) 550 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_REQUIRES "${ARGV}") 551endmacro() 552 553############################################################################## 554macro(NCBI_set_test_resources) 555 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_RESOURCES "${ARGV}") 556endmacro() 557 558############################################################################## 559macro(NCBI_set_test_labels) 560 set(NCBITEST_${NCBI_${NCBI_PROJECT}_TEST}_LABELS "${ARGV}") 561endmacro() 562 563############################################################################## 564macro(NCBI_define_test_resource _name _amount) 565 if(DEFINED NCBITEST_RESOURCE_${_name}_AMOUNT) 566 message(SEND_ERROR "${NCBI_CURRENT_SOURCE_DIR}: Test resource ${_name} already defined") 567 endif() 568 set(NCBITEST_RESOURCE_${_name}_AMOUNT ${_amount}) 569endmacro() 570 571############################################################################## 572macro(NCBI_end_test) 573 set(NCBI_${NCBI_PROJECT}_ALLTESTS ${NCBI_${NCBI_PROJECT}_ALLTESTS} ${NCBI_${NCBI_PROJECT}_TEST}) 574 unset(NCBI_${NCBI_PROJECT}_TEST) 575endmacro() 576 577############################################################################## 578macro(NCBI_add_test) 579 if ("${ARGC}" GREATER "0") 580 set(_cmd "${ARGV}") 581 if ( "${_cmd}" STREQUAL "") 582 set(_cmd "${NCBI_PROJECT}") 583 endif() 584 else() 585 set(_cmd "${NCBI_PROJECT}") 586 endif() 587 NCBI_begin_test() 588 NCBI_set_test_command(${_cmd}) 589 NCBI_end_test() 590endmacro() 591 592############################################################################## 593function(NCBI_import_hostinfo _file) 594 if(NOT EXISTS ${_file}) 595 return() 596 endif() 597 file(STRINGS ${_file} _hostinfo) 598 if (NOT "${_hostinfo}" STREQUAL "") 599 foreach( _item IN LISTS _hostinfo) 600 string(REPLACE " " ";" _item ${_item}) 601 if (NOT "${_item}" STREQUAL "") 602 list(GET _item 0 _prj) 603 list(GET _item 1 _host) 604 set_property(GLOBAL PROPERTY NCBI_PTBPROP_HOST_${_prj} ${_host}) 605 endif() 606 endforeach() 607 endif() 608endfunction() 609 610############################################################################## 611function(NCBI_register_hook _event _callback) 612 if("${_event}" STREQUAL "TARGET_PARSED") 613 variable_watch(NCBI_PTB_CALLBACK_TARGET_PARSED ${_callback}) 614 elseif("${_event}" STREQUAL "ALL_PARSED") 615 variable_watch(NCBI_PTB_CALLBACK_ALL_PARSED ${_callback}) 616 elseif("${_event}" STREQUAL "COLLECTED") 617 variable_watch(NCBI_PTB_CALLBACK_COLLECTED ${_callback}) 618 elseif("${_event}" STREQUAL "TARGET_ADDED") 619 variable_watch(NCBI_PTB_CALLBACK_TARGET_ADDED ${_callback}) 620 elseif("${_event}" STREQUAL "ALL_ADDED") 621 variable_watch(NCBI_PTB_CALLBACK_ALL_ADDED ${_callback}) 622 elseif("${_event}" STREQUAL "DATASPEC") 623 if ("${ARGC}" LESS "3") 624 message(FATAL_ERROR "DATASPEC hook requires a list of file extensions (${_callback})") 625 endif() 626 foreach( _ext IN LISTS ARGV2) 627 string(TOLOWER ${_ext} _ext) 628 variable_watch(NCBI_PTB_CALLBACK_DATASPEC${_ext} ${_callback}) 629 endforeach() 630 else() 631 message(SEND_ERROR "An attempt to register hook for an unknown event: ${_event} (${_callback})") 632 endif() 633endfunction() 634 635############################################################################## 636macro(NCBI_util_elapsed _value) 637 if(DEFINED NCBI_TIMESTAMP_START) 638 string(TIMESTAMP _curtime "%s") 639 math(EXPR _delta "${_curtime} - ${NCBI_TIMESTAMP_START}") 640 string(TIMESTAMP _curtime "%H:%M:%S") 641 set(${_value} "${_curtime} (${_delta}s)") 642 else() 643 string(TIMESTAMP ${_value} "%H:%M:%S") 644 endif() 645endmacro() 646 647############################################################################## 648macro(NCBI_util_parse_sign _input _value _negative) 649 string(SUBSTRING ${_input} 0 1 _sign) 650 if ("${_sign}" STREQUAL "-") 651 string(SUBSTRING ${_input} 1 -1 ${_value}) 652 set(${_negative} ON) 653 else() 654 set(${_value} ${_input}) 655 set(${_negative} OFF) 656 endif() 657endmacro() 658 659############################################################################## 660macro(NCBI_util_get_value _value _result) 661 if (DEFINED NCBI_${NCBI_PROJECT}_${_value}) 662 set(${_result} ${NCBI_${NCBI_PROJECT}_${_value}}) 663 elseif (DEFINED NCBI__${_value}) 664 set(${_result} ${NCBI__${_value}}) 665 else() 666 set(${_result} ${NCBI_DEFAULT_${_value}}) 667 endif() 668endmacro() 669 670############################################################################## 671function(NCBI_util_match_path _value _pattern _result) 672 file(RELATIVE_PATH _rel_value "${NCBI_SRC_ROOT}" "${_value}") 673 file(RELATIVE_PATH _rel_pattern "${NCBI_SRC_ROOT}" "${_pattern}") 674 if ("${_rel_value}" MATCHES "^${_rel_pattern}") 675 set(${_result} TRUE PARENT_SCOPE) 676 else() 677 set(${_result} FALSE PARENT_SCOPE) 678 endif() 679endfunction() 680 681############################################################################## 682############################################################################## 683############################################################################## 684set_property(GLOBAL PROPERTY NCBI_PTBPROP_ALLOWED_PROJECTS "") 685 686macro(NCBI_internal_analyze_tree) 687 if (NCBI_PTB_HAS_ROOT) 688 message(FATAL_ERROR "Unexpected call to NCBI_internal_analyze_tree (${NCBI_CURRENT_SOURCE_DIR})") 689 return() 690 endif() 691 set(NCBI_PTB_HAS_ROOT TRUE PARENT_SCOPE) 692 set(NCBI_PTB_HAS_ROOT TRUE) 693 foreach( _type IN ITEMS CONSOLEAPP GUIAPP STATIC SHARED CUSTOM) 694 set_property(GLOBAL PROPERTY NCBI_PTBPROP_TOTAL_${_type} 0) 695 set_property(GLOBAL PROPERTY NCBI_PTBPROP_COUNT_${_type} 0) 696 endforeach() 697 698 if( "${NCBI_PTBCFG_PROJECT_TARGETS}" STREQUAL "" AND 699 "${NCBI_PTBCFG_PROJECT_TAGS}" STREQUAL "" AND 700 "${NCBI_PTBCFG_PROJECT_LIST}" STREQUAL "" AND 701 NOT DEFINED NCBI_EXTERNAL_TREE_ROOT) 702 set(NCBI_PTB_NOFILTERS TRUE) 703 endif() 704 if (NCBI_PTBCFG_ENABLE_COLLECTOR AND NCBI_PTB_NOFILTERS AND NOT NCBI_PTBCFG_ALLOW_COMPOSITE) 705 set(NCBI_PTBCFG_ENABLE_COLLECTOR FALSE) 706 set(NCBI_PTBCFG_ENABLE_COLLECTOR FALSE PARENT_SCOPE) 707 endif() 708 709 if(NCBI_PTBCFG_ENABLE_COLLECTOR) 710 if(NOT DEFINED NCBI_PTBCFG_KNOWN_FOLDERS OR "${NCBI_PTBCFG_KNOWN_FOLDERS}" STREQUAL "") 711 file(GLOB _files LIST_DIRECTORIES TRUE "${NCBI_CURRENT_SOURCE_DIR}/*") 712 foreach(_file IN LISTS _files) 713 if(IS_DIRECTORY ${_file} AND EXISTS ${_file}/CMakeLists.txt) 714 get_filename_component(_basename ${_file} NAME) 715 list(APPEND NCBI_PTBCFG_KNOWN_FOLDERS ${_basename}) 716 endif() 717 endforeach() 718 endif() 719 list(LENGTH NCBI_PTBCFG_KNOWN_FOLDERS _count) 720 if(NOT ${_count} EQUAL 1) 721 set(NCBI_PTB_THIS_SRC_ROOT ${NCBI_SRC_ROOT} PARENT_SCOPE) 722 set(NCBI_PTB_THIS_SRC_ROOT ${NCBI_SRC_ROOT}) 723 endif() 724 725 NCBI_util_elapsed(_elapsed) 726 message("${_elapsed}: Analyzing source tree...") 727 set_property(GLOBAL PROPERTY NCBI_PTBPROP_ALL_PROJECTS "") 728 729 set(NCBI_PTBMODE_COLLECT_DEPS ON) 730 set(_known ${NCBI_PTBCFG_KNOWN_FOLDERS}) 731 unset(NCBI_PTBCFG_KNOWN_FOLDERS) 732 NCBI_add_subdirectory(${_known}) 733 set(NCBI_PTB_CALLBACK_ALL_PARSED TRUE) 734 set(NCBI_PTBMODE_COLLECT_DEPS OFF) 735 736 get_property(_allprojects GLOBAL PROPERTY NCBI_PTBPROP_ALL_PROJECTS) 737 get_property(_allowedprojects GLOBAL PROPERTY NCBI_PTBPROP_ALLOWED_PROJECTS) 738 739 if(OFF) 740 message("NCBI_PTBPROP_ALL_PROJECTS: ${_allprojects}") 741 foreach(_prj IN LISTS _allprojects) 742 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_prj}) 743 message("NCBI_PTBPROP_DEPS_${_prj}: ${_prjdeps}") 744 endforeach() 745 message("NCBI_PTBPROP_ALLOWED_PROJECTS: ${_allowedprojects}") 746 endif() 747 748 if("${_allowedprojects}" STREQUAL "") 749 message(FATAL_ERROR "List of projects is empty") 750 return() 751 endif() 752 753 NCBI_util_elapsed(_elapsed) 754 message("${_elapsed}: Collecting projects...") 755 list(REMOVE_DUPLICATES _allowedprojects) 756 foreach(_prj IN LISTS _allowedprojects) 757 NCBI_internal_collect_dependencies(${_prj}) 758 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_prj}) 759 get_property(_host GLOBAL PROPERTY NCBI_PTBPROP_HOST_${_prj}) 760 set(NCBI_PTB_ALLOWED_PROJECTS ${NCBI_PTB_ALLOWED_PROJECTS} ${_host} ${_prj} ${_prjdeps}) 761 endforeach() 762 list(SORT NCBI_PTB_ALLOWED_PROJECTS) 763 list(REMOVE_DUPLICATES NCBI_PTB_ALLOWED_PROJECTS) 764 765 if(NCBI_PTBCFG_ALLOW_COMPOSITE) 766 set(_allowedprojects ${NCBI_PTB_ALLOWED_PROJECTS}) 767 foreach(_prj IN LISTS _allowedprojects) 768 NCBI_internal_collect_dependencies(${_prj}) 769 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_prj}) 770 get_property(_host GLOBAL PROPERTY NCBI_PTBPROP_HOST_${_prj}) 771 set(NCBI_PTB_ALLOWED_PROJECTS ${NCBI_PTB_ALLOWED_PROJECTS} ${_host} ${_prj} ${_prjdeps}) 772 endforeach() 773 list(SORT NCBI_PTB_ALLOWED_PROJECTS) 774 list(REMOVE_DUPLICATES NCBI_PTB_ALLOWED_PROJECTS) 775 endif() 776 if(NOT NCBI_PTB_NOFILTERS) 777 foreach(_prj IN LISTS NCBI_PTB_ALLOWED_PROJECTS) 778 get_property(_dir GLOBAL PROPERTY NCBI_PTBPROP_DIR_${_prj}) 779 list(APPEND NCBI_PTB_ALLOWED_DIRS ${_dir}) 780 endforeach() 781 list(SORT NCBI_PTB_ALLOWED_DIRS) 782 list(REMOVE_DUPLICATES NCBI_PTB_ALLOWED_DIRS) 783 set(NCBI_PTB_ALLOWED_DIRS ${NCBI_PTB_ALLOWED_DIRS} PARENT_SCOPE) 784 endif() 785 786 if(OFF) 787 message("NCBI_PTB_ALLOWED_PROJECTS: ${NCBI_PTB_ALLOWED_PROJECTS}") 788 foreach(_prj IN LISTS NCBI_PTB_ALLOWED_PROJECTS) 789 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_prj}) 790 message("NCBI_PTBPROP_DEPS_${_prj}: ${_prjdeps}") 791 endforeach() 792 endif() 793 794 foreach(_prj IN LISTS NCBI_PTB_ALLOWED_PROJECTS) 795 NCBI_internal_collect_requires(${_prj}) 796 endforeach() 797 set(NCBI_PTB_CALLBACK_COLLECTED TRUE) 798 foreach(_prj IN LISTS NCBI_PTB_ALLOWED_PROJECTS) 799 if (NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${_prj}) 800 NCBI_internal_print_project_info(${_prj}) 801 endif() 802 endforeach() 803 804 set(NCBI_PTB_ALLOWED_PROJECTS ${NCBI_PTB_ALLOWED_PROJECTS} PARENT_SCOPE) 805 else() 806 message("Source tree analysis skipped") 807 endif() 808 NCBI_util_elapsed(_elapsed) 809 message("${_elapsed}: Configuring projects...") 810 variable_watch(CMAKE_CURRENT_LIST_DIR NCBI_internal_end_of_config) 811endmacro() 812 813############################################################################# 814function(NCBI_internal_end_of_config _variable _access _value) 815 if(NOT "${_access}" STREQUAL "MODIFIED_ACCESS" OR NOT "${_value}" STREQUAL "") 816 return() 817 endif() 818 set(NCBI_PTB_CALLBACK_ALL_ADDED TRUE) 819 NCBI_internal_print_report("Processed" TOTAL) 820 NCBI_internal_print_report("Added" COUNT) 821 NCBI_util_elapsed(_elapsed) 822 message("${_elapsed}: Done") 823endfunction() 824 825############################################################################# 826function(NCBI_internal_collect_dependencies _project) 827 get_property(_collected GLOBAL PROPERTY NCBI_PTBPROP_COLLECTED_DEPS) 828 if( ${_project} IN_LIST _collected) 829 return() 830 endif() 831 set_property(GLOBAL PROPERTY NCBI_PTBPROP_COLLECTED_DEPS ${_collected} ${_project}) 832 833 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${_project} SET) 834 if (NOT _prjdeps) 835 if(NOT TARGET ${_project}) 836 message("ERROR: project ${_project} not found") 837 endif() 838 return() 839 endif() 840 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${_project}) 841 foreach( _value IN LISTS _prjdeps) 842 NCBI_internal_recur_collect_dependencies( ${_project} ${_value}) 843 endforeach() 844 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_project}) 845 foreach( _value IN LISTS _prjdeps) 846 get_property(_host GLOBAL PROPERTY NCBI_PTBPROP_HOST_${_value}) 847 if ("${_host}" STREQUAL "") 848 list(APPEND _deps ${_value}) 849 elseif( NOT "${_host}" STREQUAL "${_project}") 850 list(APPEND _deps ${_host}) 851 endif() 852 endforeach() 853 if (NOT "${_deps}" STREQUAL "") 854 list(SORT _deps) 855 list(REMOVE_DUPLICATES _deps) 856 list(REMOVE_ITEM _deps ${_project}) 857 endif() 858 set_property(GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_project} "${_deps}") 859endfunction() 860 861############################################################################## 862function(NCBI_internal_recur_collect_dependencies _project _dep) 863 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_project}) 864 get_property(_depdeps GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${_dep} SET) 865 if (NOT _depdeps) 866 if(NOT TARGET ${_dep}) 867 message("ERROR: project ${_dep} not found (${_project} requires it)") 868 set_property(GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_project} ${_dep}) 869 endif() 870 return() 871 endif() 872 get_property(_depdeps GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${_dep}) 873 foreach( _value IN LISTS _dep _depdeps) 874 NCBI_internal_collect_dependencies(${_value}) 875 get_property(_valuedeps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_value}) 876 set(_prjdeps ${_prjdeps} ${_value} ${_valuedeps}) 877 endforeach() 878 if (NOT "${_prjdeps}" STREQUAL "") 879 list(SORT _prjdeps) 880 list(REMOVE_DUPLICATES _prjdeps) 881 list(REMOVE_ITEM _prjdeps ${_project}) 882 endif() 883 set_property(GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_project} ${_prjdeps}) 884endfunction() 885 886############################################################################## 887function(NCBI_internal_collect_requires _project) 888 set(_implreq "") 889 get_property(_y GLOBAL PROPERTY NCBI_PTBPROP_REQUIRES_${_project}) 890 list(APPEND _implreq "${_y}") 891 get_property(_deps GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_project}) 892 if (NOT "${_deps}" STREQUAL "") 893 list(REMOVE_DUPLICATES _deps) 894 foreach(_dep IN LISTS _deps) 895 get_property(_y GLOBAL PROPERTY NCBI_PTBPROP_REQUIRES_${_dep}) 896 list(APPEND _implreq "${_y}") 897 endforeach() 898 endif() 899 if (NOT "${_implreq}" STREQUAL "") 900 list(SORT _implreq) 901 list(REMOVE_DUPLICATES _implreq) 902 set_property(GLOBAL PROPERTY NCBI_PTBPROP_IMPLREQ_${_project} ${_implreq}) 903 endif() 904endfunction() 905 906############################################################################## 907function(NCBI_internal_include) 908 include(${ARGV0}) 909endfunction() 910 911############################################################################## 912function(NCBI_internal_collect_sources) 913 set(_dir ${NCBI_CURRENT_SOURCE_DIR}) 914 if(NCBI_PTBMODE_PARTS) 915 set(_prefix "Hosted Libraries\\${NCBI_PROJECT_PARTNAME}\\") 916 else() 917 set(_prefix "") 918 endif() 919 set(_c_ext ".c") 920 set(_cpp_ext ".cpp;.cxx;.cc;.c++") 921 set(_sources "") 922 set(_nopch "") 923 set(_ex "") 924 925 if (NOT NCBI_PTBMODE_PARTS) 926 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "SHARED") 927 NCBI_util_get_value(DLLENTRY _entry) 928 if (NOT "${_entry}" STREQUAL "") 929 list(APPEND _ex ${_entry}) 930 endif() 931 endif() 932 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "GUIAPP") 933 NCBI_util_get_value(GUIENTRY _entry) 934 if (NOT "${_entry}" STREQUAL "") 935 list(APPEND _ex ${_entry}) 936 endif() 937 endif() 938 endif() 939 940 foreach(_file IN LISTS NCBI_${NCBI_PROJECT}_SOURCES _ex) 941 if(EXISTS ${_dir}/${_file} AND NOT IS_DIRECTORY ${_dir}/${_file}) 942 set(_file "${_dir}/${_file}") 943 else() 944 foreach(_ext IN LISTS _c_ext _cpp_ext) 945 if(EXISTS ${_dir}/${_file}${_ext}) 946 set(_file "${_dir}/${_file}${_ext}") 947 break() 948 endif() 949 endforeach() 950 endif() 951 list(APPEND _sources "${_file}") 952 endforeach() 953 954 foreach(_file IN LISTS NCBI_${NCBI_PROJECT}_GENERATED_SOURCES) 955 if(NOT IS_ABSOLUTE ${_file}) 956 set(_file "${_dir}/${_file}") 957 endif() 958 list(APPEND _sources "${_file}") 959 set_source_files_properties(${_file} PROPERTIES GENERATED TRUE) 960 endforeach() 961 962 foreach(_file IN LISTS NCBI_${NCBI_PROJECT}_NOPCH) 963 if(EXISTS ${_dir}/${_file} AND NOT IS_DIRECTORY ${_dir}/${_file}) 964 set(_file "${_dir}/${_file}") 965 else() 966 foreach(_ext IN LISTS _c_ext _cpp_ext) 967 if(EXISTS ${_dir}/${_file}${_ext}) 968 set(_file "${_dir}/${_file}${_ext}") 969 break() 970 endif() 971 endforeach() 972 endif() 973 list(APPEND _nopch "${_file}") 974 endforeach() 975 foreach(_file IN LISTS _sources) 976 get_filename_component(_fext ${_file} EXT) 977 foreach(_ext IN LISTS _c_ext) 978 if("${_fext}" STREQUAL "${_ext}") 979 list(APPEND _nopch "${_file}") 980 endif() 981 endforeach() 982 endforeach() 983 if(NOT "${_nopch}" STREQUAL "") 984 list(REMOVE_DUPLICATES _nopch) 985 endif() 986 987 if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 988 message("create source group ${_prefix}Source Files") 989 message("${_sources}") 990 endif() 991 source_group("${_prefix}Source Files" FILES ${_sources}) 992 set(NCBITMP_PROJECT_SOURCES ${NCBITMP_PROJECT_SOURCES} ${_sources} PARENT_SCOPE) 993 set(NCBITMP_PROJECT_NOPCH ${NCBITMP_PROJECT_NOPCH} ${_nopch} PARENT_SCOPE) 994endfunction() 995 996############################################################################## 997function(NCBI_internal_collect_headers) 998 999 file(RELATIVE_PATH _rel "${NCBI_SRC_ROOT}" "${NCBI_CURRENT_SOURCE_DIR}") 1000 if (NOT "${NCBI_INC_ROOT}" STREQUAL "${NCBI_SRC_ROOT}") 1001 set(_inc_dir ${NCBI_INC_ROOT}/${_rel}) 1002 else() 1003 set(_inc_dir "") 1004 endif() 1005 if(NCBI_PTBMODE_PARTS) 1006 set(_prefix "Hosted Libraries\\${NCBI_PROJECT_PARTNAME}\\") 1007 else() 1008 set(_prefix "") 1009 endif() 1010 NCBI_util_get_value(HEADERS _headers) 1011 1012 if (MSVC_IDE OR XCODE) 1013 set(_priv "") 1014 set(_pub "") 1015 set(_inl "") 1016 if ( NOT "${_headers}" STREQUAL "") 1017 foreach(_mask IN LISTS _headers) 1018 file(GLOB _files LIST_DIRECTORIES false "${NCBI_CURRENT_SOURCE_DIR}/${_mask}") 1019 set(_priv ${_priv} ${_files}) 1020 if (NOT "${_inc_dir}" STREQUAL "") 1021 if (${_mask} MATCHES "[.]inl$") 1022 file(GLOB _files LIST_DIRECTORIES false "${_inc_dir}/${_mask}") 1023 set(_inl ${_inl} ${_files}) 1024 else() 1025 file(GLOB _files LIST_DIRECTORIES false "${_inc_dir}/${_mask}") 1026 set(_pub ${_pub} ${_files}) 1027 endif() 1028 endif() 1029 endforeach() 1030 1031 if ( NOT "${_priv}" STREQUAL "") 1032 source_group("${_prefix}Private Headers" FILES ${_priv}) 1033 endif() 1034 if ( NOT "${_pub}" STREQUAL "") 1035 source_group("${_prefix}Header Files" FILES ${_pub}) 1036 endif() 1037 if ( NOT "${_inl}" STREQUAL "") 1038 source_group("${_prefix}Inline Files" FILES ${_inl}) 1039 endif() 1040 endif() 1041 set(NCBITMP_PROJECT_HEADERS ${NCBITMP_PROJECT_HEADERS} ${_priv} ${_pub} ${_inl} PARENT_SCOPE) 1042 else() 1043 set(NCBITMP_PROJECT_HEADERS "" PARENT_SCOPE) 1044 endif() 1045endfunction() 1046 1047############################################################################## 1048function(NCBI_internal_add_resources) 1049 if (WIN32) 1050 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "CONSOLEAPP" OR ${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "GUIAPP") 1051 NCBI_util_get_value(RESOURCES _res) 1052 else() 1053 if (DEFINED NCBI_${NCBI_PROJECT}_RESOURCES) 1054 set(_res ${NCBI_${NCBI_PROJECT}_RESOURCES}) 1055 else() 1056 set(_res "") 1057 endif() 1058 endif() 1059 1060 if(NCBI_PTBMODE_PARTS) 1061 set(_prefix "Hosted Libraries\\${NCBI_PROJECT_PARTNAME}\\") 1062 else() 1063 set(_prefix "") 1064 endif() 1065 if ( NOT "${_res}" STREQUAL "") 1066 source_group("${_prefix}Resource Files" FILES ${_res}) 1067 endif() 1068 set(NCBITMP_PROJECT_RESOURCES ${_res} PARENT_SCOPE) 1069 else() 1070 set(NCBITMP_PROJECT_RESOURCES "" PARENT_SCOPE) 1071 endif() 1072endfunction() 1073 1074############################################################################## 1075function(NCBI_internal_collect_dataspec) 1076 if (NOT DEFINED NCBI_${NCBI_PROJECT}_DATASPEC) 1077 return() 1078 endif() 1079 1080 if(NCBI_PTBMODE_PARTS) 1081 set(_prefix "Hosted Libraries\\${NCBI_PROJECT_PARTNAME}\\") 1082 else() 1083 set(_prefix "") 1084 endif() 1085 1086 foreach(_dataspec IN LISTS NCBI_${NCBI_PROJECT}_DATASPEC) 1087 if (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/${_dataspec}) 1088 get_filename_component(_ext ${_dataspec} EXT) 1089 set(_input DATASPEC ${NCBI_CURRENT_SOURCE_DIR}/${_dataspec} REQUIRES ${NCBITMP_REQUIRE} ${NCBITMP_COMPONENTS} RETURN _output) 1090 string(TOLOWER ${_ext} _ext) 1091 set( NCBI_PTB_CALLBACK_DATASPEC${_ext} ${_input}) 1092 cmake_parse_arguments(DT "" "DATASPEC" "SOURCES;HEADERS;INCLUDE" ${_output}) 1093 set(_specfiles ${_specfiles} ${DT_DATASPEC}) 1094 set(_srcfiles ${_srcfiles} ${DT_SOURCES}) 1095 set(_incfiles ${_incfiles} ${DT_HEADERS}) 1096 else() 1097 message(SEND_ERROR "file not found: ${NCBI_CURRENT_SOURCE_DIR}/${_dataspec}") 1098 endif() 1099 endforeach() 1100 1101 set_source_files_properties(${_srcfiles} ${_incfiles} PROPERTIES GENERATED TRUE) 1102 source_group("${_prefix}Source Files" FILES ${_srcfiles}) 1103 set(NCBITMP_PROJECT_SOURCES ${NCBITMP_PROJECT_SOURCES} ${_srcfiles} PARENT_SCOPE) 1104 source_group("${_prefix}Header Files" FILES ${_incfiles}) 1105 set(NCBITMP_PROJECT_HEADERS ${NCBITMP_PROJECT_HEADERS} ${_incfiles} PARENT_SCOPE) 1106 source_group("${_prefix}DataSpec Files" FILES ${_specfiles}) 1107 set(NCBITMP_PROJECT_DATASPEC ${NCBITMP_PROJECT_DATASPEC} ${_specfiles} PARENT_SCOPE) 1108endfunction() 1109 1110############################################################################## 1111function(NCBI_internal_add_dataspec) 1112 if (NOT DEFINED NCBITMP_PROJECT_DATASPEC) 1113 return() 1114 endif() 1115 foreach(_dataspec IN LISTS NCBITMP_PROJECT_DATASPEC) 1116 get_filename_component(_ext ${_dataspec} EXT) 1117 set(_input GENERATE DATASPEC ${_dataspec} REQUIRES ${NCBITMP_REQUIRE} ${NCBITMP_COMPONENTS} RETURN _output) 1118 string(TOLOWER ${_ext} _ext) 1119 set( NCBI_PTB_CALLBACK_DATASPEC${_ext} ${_input}) 1120 cmake_parse_arguments(DT "" "DATASPEC" "SOURCES;HEADERS;INCLUDE" ${_output}) 1121 if(NOT "${DT_INCLUDE}" STREQUAL "") 1122 set(NCBITMP_INCLUDES ${NCBITMP_INCLUDES} ${DT_INCLUDE} PARENT_SCOPE) 1123 endif() 1124 endforeach() 1125endfunction() 1126 1127############################################################################## 1128function(NCBI_internal_define_precompiled_header_usage) 1129 1130 NCBI_util_get_value(USEPCH _usepch) 1131 NCBI_util_get_value(PCH _pch) 1132 NCBI_util_get_value(PCH_DEFINE _pchdef) 1133 1134if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1135 message("_usepch ${_usepch}: prj=${NCBI_${NCBI_PROJECT}_USEPCH} dir=${NCBI__USEPCH} def=${NCBI_DEFAULT_USEPCH}") 1136 message("_pch ${_pch}: prj=${NCBI_${NCBI_PROJECT}_PCH} dir=${NCBI__PCH} def=${NCBI_DEFAULT_PCH}") 1137 message("_pchdef ${_pchdef}") 1138endif() 1139 1140 if (NOT DEFINED NCBITMP_PROJECT_SOURCES) 1141 set(_usepch OFF) 1142 endif() 1143 1144 if (_usepch) 1145 if (MSVC) 1146 set_target_properties(${NCBI_PROJECT} PROPERTIES COMPILE_FLAGS "/Yu${_pch}") 1147 set(_files ${NCBITMP_PROJECT_SOURCES}) 1148 if (DEFINED NCBITMP_PROJECT_NOPCH) 1149 foreach(_file IN LISTS NCBITMP_PROJECT_NOPCH) 1150 list(REMOVE_ITEM _files ${_file}) 1151 set_source_files_properties(${_file} PROPERTIES COMPILE_FLAGS "/Y-") 1152 endforeach() 1153 endif() 1154 1155 if ("${_files}" STREQUAL "") 1156 return() 1157 endif() 1158 list(GET _files 0 _pchfile) 1159 get_filename_component(_pchname ${_pchfile} NAME) 1160 foreach(_file IN LISTS _files) 1161 get_filename_component(_name ${_file} NAME) 1162 if (${_name} STRLESS ${_pchname}) 1163 set(_pchname ${_name}) 1164 set(_pchfile ${_file}) 1165 endif() 1166 set_source_files_properties(${_file} PROPERTIES COMPILE_DEFINITIONS ${_pchdef}) 1167 endforeach() 1168 set_source_files_properties(${_pchfile} PROPERTIES COMPILE_FLAGS "/Yc${_pch}") 1169 1170 elseif (XCODE) 1171 1172 if (EXISTS ${NCBI_CURRENT_SOURCE_DIR}/${_pch}) 1173 set(_pch ${NCBI_CURRENT_SOURCE_DIR}/${_pch}) 1174 elseif (EXISTS ${NCBI_INC_ROOT}/${_pch}) 1175 set(_pch ${NCBI_INC_ROOT}/${_pch}) 1176 else() 1177 file(RELATIVE_PATH _rel "${NCBI_SRC_ROOT}" "${NCBI_CURRENT_SOURCE_DIR}") 1178 if (EXISTS "${NCBI_INC_ROOT}/${_rel}/${_pch}") 1179 set(_pch "${NCBI_INC_ROOT}/${_rel}/${_pch}") 1180 else() 1181# message(WARNING "ERROR: in project ${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT}, precompiled header ${_pch} was not found.") 1182 set(_usepch NO) 1183 endif() 1184 endif() 1185 if (_usepch) 1186 set_target_properties(${NCBI_PROJECT} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES") 1187 set_target_properties(${NCBI_PROJECT} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${_pch}") 1188 endif() 1189 endif() 1190 endif() 1191endfunction() 1192 1193############################################################################## 1194function(NCBI_internal_install_component_files _comp) 1195 if (NOT DEFINED NCBI_COMPONENT_${_comp}_BINPATH) 1196 return() 1197 endif() 1198 1199 set(_rt ${NCBI_CONFIGURATION_RUNTIMELIB}) 1200 foreach(_cfg IN LISTS NCBI_CONFIGURATION_TYPES) 1201 if (DEFINED NCBI_COMPONENT_${_comp}_BINPATH_${_cfg}${_rt}) 1202 set(_src ${NCBI_COMPONENT_${_comp}_BINPATH_${_cfg}${_rt}}) 1203 elseif (DEFINED NCBI_COMPONENT_${_comp}_BINPATH_${_cfg}) 1204 set(_src ${NCBI_COMPONENT_${_comp}_BINPATH_${_cfg}}) 1205 elseif (DEFINED NCBI_COMPONENT_${_comp}_BINPATH) 1206 if (IS_DIRECTORY ${NCBI_COMPONENT_${_comp}_BINPATH}/${_cfg}${_rt}) 1207 set(_src ${NCBI_COMPONENT_${_comp}_BINPATH}/${_cfg}${_rt}) 1208 elseif (IS_DIRECTORY ${NCBI_COMPONENT_${_comp}_BINPATH}/${_cfg}) 1209 set(_src ${NCBI_COMPONENT_${_comp}_BINPATH}/${_cfg}) 1210 else() 1211 set(_src ${NCBI_COMPONENT_${_comp}_BINPATH}) 1212 endif() 1213 else() 1214 continue() 1215 endif() 1216 if (IS_DIRECTORY ${_src}) 1217 file(GLOB _files LIST_DIRECTORIES false "${_src}/*${CMAKE_SHARED_LIBRARY_SUFFIX}") 1218 foreach(_file IN LISTS _files) 1219#message("============ COPY ${_file} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${_cfg}") 1220 file(COPY ${_file} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${_cfg}) 1221 endforeach() 1222 endif() 1223 endforeach() 1224endfunction() 1225 1226############################################################################## 1227macro(NCBI_internal_process_project_requires) 1228 set(NCBITMP_REQUIRE_NOTFOUND "") 1229 if(NCBI_PTBMODE_PARTS) 1230 set(_all ${NCBI__REQUIRES} ${NCBI_${NCBI_PROJECT}_REQUIRES}) 1231 else() 1232 set(_all ${NCBI__REQUIRES} ${NCBI_${NCBI_PROJECT}_REQUIRES} ${NCBITMP_PROJECT_REQUIRES}) 1233 endif() 1234 if (NOT "${_all}" STREQUAL "") 1235 list(REMOVE_DUPLICATES _all) 1236 endif() 1237 1238 set(NCBITMP_REQUIRE ${_all}) 1239 if(NCBI_PTBMODE_COLLECT_DEPS) 1240 set_property(GLOBAL PROPERTY NCBI_PTBPROP_REQUIRES_${NCBI_PROJECT} ${_all}) 1241 endif() 1242 1243 foreach(_req IN LISTS _all) 1244 NCBI_util_parse_sign(${_req} _value _negate) 1245 if(${_value} IN_LIST NCBI_ALL_LEGACY) 1246 if (NOT NCBI_PTBMODE_COLLECT_DEPS) 1247 message(SEND_ERROR "${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}) component name ${_value} is deprecated, use ${NCBI_COMPONENT_${_value}_FOUND} instead") 1248 endif() 1249 set(_value ${NCBI_COMPONENT_${_value}_FOUND}) 1250 endif() 1251 if (${_value} OR NCBI_REQUIRE_${_value}_FOUND OR NCBI_COMPONENT_${_value}_FOUND) 1252 if (_negate) 1253 set(NCBITMP_REQUIRE_NOTFOUND ${NCBITMP_REQUIRE_NOTFOUND} ${_req}) 1254 else() 1255# set(NCBITMP_INCLUDES ${NCBITMP_INCLUDES} ${NCBI_COMPONENT_${_value}_INCLUDE}) 1256 set(NCBITMP_INCLUDES_SYSTEM ${NCBITMP_INCLUDES_SYSTEM} ${NCBI_COMPONENT_${_value}_INCLUDE}) 1257 set(NCBITMP_DEFINES ${NCBITMP_DEFINES} ${NCBI_COMPONENT_${_value}_DEFINES}) 1258 set(NCBITMP_EXTLIB ${NCBITMP_EXTLIB} ${NCBI_COMPONENT_${_value}_LIBS}) 1259 foreach(_lib IN LISTS NCBI_COMPONENT_${_value}_NCBILIB) 1260 if(NOT ${_lib} STREQUAL ${NCBI_${NCBI_PROJECT}_OUTPUT}) 1261 set(NCBITMP_NCBILIB ${NCBITMP_NCBILIB} ${_lib}) 1262 endif() 1263 endforeach() 1264 if (WIN32 AND NOT NCBI_PTBMODE_COLLECT_DEPS) 1265 NCBI_internal_install_component_files(${_value}) 1266 endif() 1267 endif() 1268 else() 1269 if (_negate) 1270# no-no, this is a mistake 1271# set(NCBITMP_INCLUDES ${NCBITMP_INCLUDES} ${NCBI_COMPONENT_${_value}_INCLUDE}) 1272# set(NCBITMP_DEFINES ${NCBITMP_DEFINES} ${NCBI_COMPONENT_${_value}_DEFINES}) 1273# set(NCBITMP_EXTLIB ${NCBITMP_EXTLIB} ${NCBI_COMPONENT_${_value}_LIBS}) 1274 else() 1275 set(NCBITMP_REQUIRE_NOTFOUND ${NCBITMP_REQUIRE_NOTFOUND} ${_req}) 1276 endif() 1277 endif() 1278 endforeach() 1279 1280 if (NOT NCBI_PTBMODE_COLLECT_DEPS AND NOT ${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "STATIC") 1281 get_property(_all GLOBAL PROPERTY NCBI_PTBPROP_IMPLREQ_${NCBI_PROJECT}) 1282 foreach(_req IN LISTS _all) 1283 NCBI_util_parse_sign(${_req} _value _negate) 1284 if (${_value} OR NCBI_REQUIRE_${_value}_FOUND OR NCBI_COMPONENT_${_value}_FOUND) 1285 if (_negate) 1286 set(NCBITMP_REQUIRE_NOTFOUND ${NCBITMP_REQUIRE_NOTFOUND} ${_req}) 1287 endif() 1288 else() 1289 if (NOT _negate) 1290 set(NCBITMP_REQUIRE_NOTFOUND ${NCBITMP_REQUIRE_NOTFOUND} ${_req}) 1291 endif() 1292 endif() 1293 endforeach() 1294 endif() 1295 1296 if (NOT "${NCBITMP_REQUIRE_NOTFOUND}" STREQUAL "") 1297 list(REMOVE_DUPLICATES NCBITMP_REQUIRE_NOTFOUND) 1298 endif() 1299endmacro() 1300 1301############################################################################## 1302macro(NCBI_internal_process_project_components) 1303 set(NCBITMP_COMPONENT_NOTFOUND "") 1304 if(NCBI_PTBMODE_PARTS) 1305 set(_all ${NCBI__COMPONENTS} ${NCBI_${NCBI_PROJECT}_COMPONENTS}) 1306 else() 1307 set(_all ${NCBI__COMPONENTS} ${NCBI_${NCBI_PROJECT}_COMPONENTS} ${NCBITMP_PROJECT_COMPONENTS}) 1308 endif() 1309 if (NOT "${_all}" STREQUAL "") 1310 list(REMOVE_DUPLICATES _all) 1311 endif() 1312 1313 set(NCBITMP_COMPONENTS ${_all}) 1314 if(NCBI_PTBMODE_COLLECT_DEPS) 1315 set_property(GLOBAL PROPERTY NCBI_PTBPROP_COMPONENTS_${NCBI_PROJECT} ${_all}) 1316 endif() 1317 1318 foreach(_value IN LISTS _all) 1319 if(${_value} IN_LIST NCBI_ALL_LEGACY) 1320 if (NOT NCBI_PTBMODE_COLLECT_DEPS) 1321 message(SEND_ERROR "${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}) component name ${_value} is deprecated, use ${NCBI_COMPONENT_${_value}_FOUND} instead") 1322 endif() 1323 set(_value ${NCBI_COMPONENT_${_value}_FOUND}) 1324 endif() 1325 if (${_value} OR NCBI_REQUIRE_${_value}_FOUND OR NCBI_COMPONENT_${_value}_FOUND) 1326# set(NCBITMP_INCLUDES ${NCBITMP_INCLUDES} ${NCBI_COMPONENT_${_value}_INCLUDE}) 1327 set(NCBITMP_INCLUDES_SYSTEM ${NCBITMP_INCLUDES_SYSTEM} ${NCBI_COMPONENT_${_value}_INCLUDE}) 1328 set(NCBITMP_DEFINES ${NCBITMP_DEFINES} ${NCBI_COMPONENT_${_value}_DEFINES}) 1329 set(NCBITMP_EXTLIB ${NCBITMP_EXTLIB} ${NCBI_COMPONENT_${_value}_LIBS}) 1330 foreach(_lib IN LISTS NCBI_COMPONENT_${_value}_NCBILIB) 1331 if(NOT ${_lib} STREQUAL ${NCBI_${NCBI_PROJECT}_OUTPUT}) 1332 set(NCBITMP_NCBILIB ${NCBITMP_NCBILIB} ${_lib}) 1333 endif() 1334 endforeach() 1335 if (WIN32 AND NOT NCBI_PTBMODE_COLLECT_DEPS) 1336 NCBI_internal_install_component_files(${_value}) 1337 endif() 1338 else() 1339 set(NCBITMP_COMPONENT_NOTFOUND ${NCBITMP_COMPONENT_NOTFOUND} ${_value}) 1340 endif() 1341 endforeach() 1342endmacro() 1343 1344############################################################################## 1345function(NCBI_internal_collect_parts _result) 1346 set(_hostproject ${NCBI_PROJECT}) 1347 set(_hostdir ${NCBI_CURRENT_SOURCE_DIR}) 1348# verify that all parts can be found 1349 foreach(_part IN LISTS NCBI_${_hostproject}_PARTS) 1350 set(_filepath ${NCBI_SRC_ROOT}/${_part}) 1351 get_filename_component(_path ${_filepath} DIRECTORY) 1352 if(NOT EXISTS ${_path}/CMakeLists.txt) 1353 if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1354 message("WARNING: Project part ${_part} not found: ${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}): ") 1355 endif() 1356 set(${_result} FALSE PARENT_SCOPE) 1357 return() 1358 endif() 1359 endforeach() 1360 1361 set(NCBI_PTBMODE_PARTS ON) 1362 foreach(_part IN LISTS NCBI_${_hostproject}_PARTS) 1363 set(_filepath ${NCBI_SRC_ROOT}/${_part}) 1364 get_filename_component(_path ${_filepath} DIRECTORY) 1365 get_filename_component(_lib ${_filepath} NAME) 1366 1367 unset(NCBI_PROJECT) 1368 unset(NCBI_PROJECT_ID) 1369 unset(NCBI__USEPCH) 1370 unset(NCBI__REQUIRES) 1371 unset(NCBI__COMPONENTS) 1372 unset(NCBI__INCLUDES) 1373 unset(NCBI__DEFINES) 1374 unset(NCBI__NCBILIB) 1375 unset(NCBI__EXTLIB) 1376 1377 file(RELATIVE_PATH _relpath ${NCBI_SRC_ROOT} ${_path}) 1378 string(REPLACE "/" ";" _dirlist ${_relpath}) 1379 set(NCBI_CURRENT_SOURCE_DIR ${NCBI_SRC_ROOT}) 1380 foreach(_dir IN LISTS _dirlist) 1381 set(NCBI_CURRENT_SOURCE_DIR ${NCBI_CURRENT_SOURCE_DIR}/${_dir}) 1382 if(EXISTS ${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.txt) 1383 include(${NCBI_CURRENT_SOURCE_DIR}/CMakeLists.txt) 1384 endif() 1385 endforeach() 1386 set(NCBI_CURRENT_SOURCE_DIR ${_path}) 1387 1388 if (EXISTS ${_path}/CMakeLists.${_lib}.lib.txt) 1389 include(${_path}/CMakeLists.${_lib}.lib.txt) 1390 elseif (EXISTS ${_path}/CMakeLists.${_lib}.asn.txt) 1391 include(${_path}/CMakeLists.${_lib}.asn.txt) 1392 elseif (EXISTS ${_path}/CMakeLists.${_lib}.txt) 1393 include(${_path}/CMakeLists.${_lib}.txt) 1394 else() 1395 message("ERROR: Project part ${_part} not found: ${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}): ") 1396 set(${_result} FALSE PARENT_SCOPE) 1397 return() 1398 endif() 1399 endforeach() 1400 1401 set(NCBITMP_PROJECT_PART_IDS ${NCBITMP_PROJECT_PART_IDS} PARENT_SCOPE) 1402 set(NCBITMP_PROJECT_PARTS ${NCBITMP_PROJECT_PARTS} PARENT_SCOPE) 1403 set(NCBITMP_PROJECT_REQUIRES ${NCBITMP_PROJECT_REQUIRES} PARENT_SCOPE) 1404 set(NCBITMP_PROJECT_COMPONENTS ${NCBITMP_PROJECT_COMPONENTS} PARENT_SCOPE) 1405 set(NCBITMP_PROJECT_INCLUDES ${NCBITMP_PROJECT_INCLUDES} PARENT_SCOPE) 1406 set(NCBITMP_PROJECT_DEFINES ${NCBITMP_PROJECT_DEFINES} PARENT_SCOPE) 1407 set(NCBITMP_PROJECT_NCBILIB ${NCBITMP_PROJECT_NCBILIB} PARENT_SCOPE) 1408 set(NCBITMP_PROJECT_EXTLIB ${NCBITMP_PROJECT_EXTLIB} PARENT_SCOPE) 1409 set(NCBITMP_PROJECT_SOURCES ${NCBITMP_PROJECT_SOURCES} PARENT_SCOPE) 1410 set(NCBITMP_PROJECT_NOPCH ${NCBITMP_PROJECT_NOPCH} PARENT_SCOPE) 1411 set(NCBITMP_PROJECT_DATASPEC ${NCBITMP_PROJECT_DATASPEC} PARENT_SCOPE) 1412 set(NCBITMP_PROJECT_HEADERS ${NCBITMP_PROJECT_HEADERS} PARENT_SCOPE) 1413 set(${_result} TRUE PARENT_SCOPE) 1414 return() 1415endfunction() 1416 1417############################################################################## 1418macro(NCBI_internal_process_parts _result) 1419 1420 set(NCBITMP_PROJECT_PART_IDS "") 1421 set(NCBITMP_PROJECT_PARTS "") 1422 NCBI_internal_collect_parts(_result) 1423 1424 if(_result) 1425 if (NCBI_PTBMODE_COLLECT_DEPS OR NOT NCBI_PTBCFG_ENABLE_COLLECTOR) 1426#set_property(GLOBAL PROPERTY NCBI_PTBPROP_PARTS_${NCBI_PROJECT_ID} ${NCBITMP_PROJECT_PART_IDS}) 1427 foreach(_part IN LISTS NCBITMP_PROJECT_PART_IDS) 1428 set_property(GLOBAL PROPERTY NCBI_PTBPROP_HOSTID_${_part} ${NCBI_PROJECT_ID}) 1429 endforeach() 1430 foreach(_part IN LISTS NCBITMP_PROJECT_PARTS NCBI_${NCBI_PROJECT}_VIRTPARTS) 1431 if (NOT "${_part}" STREQUAL ${NCBI_PROJECT}) 1432 set_property(GLOBAL PROPERTY NCBI_PTBPROP_HOST_${_part} ${NCBI_PROJECT}) 1433 endif() 1434 endforeach() 1435 endif() 1436 endif() 1437endmacro() 1438 1439############################################################################## 1440function(NCBI_internal_process_interface_libraries _lib) 1441 if (NOT TARGET ${_lib}) 1442 return() 1443 endif() 1444 get_target_property(_deps ${_lib} INTERFACE_LINK_LIBRARIES) 1445 if ( NOT "${_deps}" STREQUAL "") 1446 set(_value "") 1447 foreach(_prj IN LISTS _deps) 1448 get_property(_local GLOBAL PROPERTY NCBI_PTBPROP_LOCAL_${_prj}) 1449 if ("${_local}" STREQUAL "" OR NOT ${_local} IN_LIST NCBI_PTB_ALLOWED_PROJECTS) 1450 set(_value ${_value} ${_prj}) 1451 NCBI_internal_process_interface_libraries(${_prj}) 1452 else() 1453 set(_value ${_value} ${_local}) 1454 endif() 1455 endforeach() 1456 set_target_properties(${_lib} PROPERTIES INTERFACE_LINK_LIBRARIES "${_value}") 1457 endif() 1458endfunction() 1459 1460############################################################################## 1461function(NCBI_internal_verify_ncbilibs) 1462 set(_res "") 1463 set(_exclude "") 1464 foreach(_prj IN LISTS NCBITMP_NCBILIB) 1465 NCBI_util_parse_sign(${_prj} _value _negate) 1466 list(APPEND _res ${_value}) 1467 if (_negate) 1468 list(APPEND _exclude ${_value}) 1469 endif() 1470 endforeach() 1471 foreach(_prj IN LISTS _exclude) 1472 list(REMOVE_ITEM _res ${_prj}) 1473 endforeach() 1474 set(NCBITMP_NCBILIB ${_res} PARENT_SCOPE) 1475endfunction() 1476 1477############################################################################## 1478function(NCBI_internal_verify_libs) 1479 set(_optimize NO) 1480 if (WIN32 AND NCBI_PTBCFG_ENABLE_COLLECTOR 1481 AND NOT NCBI_PTBMODE_COLLECT_DEPS 1482 AND NOT DEFINED NCBI_EXTERNAL_TREE_ROOT 1483 AND NOT DEFINED NCBI_PTBCFG_DOINSTALL) 1484 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "STATIC") 1485# set(_ncbilib ${NCBITMP_NCBILIB}) 1486 get_property(_ncbilib GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${NCBI_PROJECT}) 1487 set(_optimize YES) 1488 else() 1489 get_property(_ncbilib GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${NCBI_PROJECT}) 1490 if ("${_ncbilib}" STREQUAL "") 1491 set(_ncbilib ${NCBITMP_NCBILIB}) 1492 endif() 1493 endif() 1494 else() 1495 set(_ncbilib ${NCBITMP_NCBILIB}) 1496 endif() 1497 if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1498 message("NCBI_internal_verify_libs ${NCBI_PROJECT_ID}: on enter = ${_ncbilib}") 1499 endif() 1500 set(_value "") 1501 if ( NOT "${_ncbilib}" STREQUAL "") 1502 list(REMOVE_DUPLICATES _ncbilib) 1503 foreach(_prj IN LISTS _ncbilib) 1504 get_property(_host GLOBAL PROPERTY NCBI_PTBPROP_HOST_${_prj}) 1505 if ("${_host}" STREQUAL "") 1506 if (_optimize) 1507 get_property(_hasspec GLOBAL PROPERTY NCBI_PTBPROP_DATASPEC_${_prj}) 1508 if (_hasspec) 1509 set(_value ${_value} ${_prj}) 1510 endif() 1511 else() 1512 set(_value ${_value} ${_prj}) 1513 endif() 1514 else() 1515 set(_value ${_value} ${_host}) 1516 endif() 1517 endforeach() 1518 endif() 1519 if ( NOT "${_value}" STREQUAL "") 1520 list(REMOVE_DUPLICATES _value) 1521 list(REMOVE_ITEM _value ${NCBI_PROJECT}) 1522 set(_ncbilib ${_value}) 1523 endif() 1524 1525 if ( NOT "${_ncbilib}" STREQUAL "" AND DEFINED NCBI_EXTERNAL_TREE_ROOT) 1526 set(_value "") 1527 foreach(_prj IN LISTS _ncbilib) 1528 get_property(_local GLOBAL PROPERTY NCBI_PTBPROP_LOCAL_${_prj}) 1529 if ("${_local}" STREQUAL "" OR NOT ${_local} IN_LIST NCBI_PTB_ALLOWED_PROJECTS) 1530 set(_value ${_value} ${_prj}) 1531 NCBI_internal_process_interface_libraries(${_prj}) 1532 else() 1533 set(_value ${_value} ${_local}) 1534 endif() 1535 endforeach() 1536 endif() 1537 1538 if (NOT NCBI_PTBMODE_COLLECT_DEPS) 1539 set(_tk_libs "${_value}") 1540 set(_value "") 1541 foreach(_tk_lib IN LISTS _tk_libs) 1542 if(${_tk_lib} STREQUAL "general") 1543 set(_value ${_value} \$<1:general>) 1544 else() 1545 set(_value ${_value} ${_tk_lib}) 1546 endif() 1547 endforeach() 1548 1549 get_property(_allprojects GLOBAL PROPERTY NCBI_PTBPROP_ALL_PROJECTS) 1550 set(NCBITMP_TARGET_NOTFOUND "") 1551 get_property(_tk_libs GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${NCBI_PROJECT}) 1552 if(NOT "${_tk_libs}" STREQUAL "") 1553 foreach(_tk_lib IN LISTS _tk_libs) 1554 if(NOT TARGET ${_tk_lib} AND NOT ${_tk_lib} IN_LIST _allprojects) 1555 list(APPEND NCBITMP_TARGET_NOTFOUND ${_tk_lib}) 1556 endif() 1557 endforeach() 1558 endif() 1559 endif() 1560 1561 if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1562 message("NCBI_internal_verify_libs ${NCBI_PROJECT_ID}: on exit = ${_value}") 1563 endif() 1564 list(REMOVE_DUPLICATES _value) 1565 set(NCBITMP_NCBILIB ${_value} PARENT_SCOPE) 1566 set(NCBITMP_TARGET_NOTFOUND ${NCBITMP_TARGET_NOTFOUND} PARENT_SCOPE) 1567endfunction() 1568 1569############################################################################## 1570function(NCBI_internal_process_project_filters _result) 1571 1572 if(NOT "${NCBI_PTBCFG_PROJECT_TARGETS}" STREQUAL "" AND NOT "${NCBI_PROJECT}" STREQUAL "") 1573 foreach(_prj IN LISTS NCBI_PTBCFG_PROJECT_TARGETS) 1574 if("${_prj}" STREQUAL "") 1575 continue() 1576 endif() 1577 NCBI_util_parse_sign( ${_prj} _value _negate) 1578 if (${NCBI_PROJECT} STREQUAL ${_value}) 1579 if(_negate) 1580 set(${_result} FALSE PARENT_SCOPE) 1581 else() 1582 set(${_result} TRUE PARENT_SCOPE) 1583 endif() 1584 return() 1585 endif() 1586 endforeach() 1587 endif() 1588 1589 if(NOT "${NCBI_PTBCFG_PROJECT_TAGS}" STREQUAL "" AND NOT "${NCBI_PROJECT}" STREQUAL "") 1590 set(_alltags ${NCBI__PROJTAG} ${NCBI_${NCBI_PROJECT}_PROJTAG}) 1591 if("${NCBI_PTBCFG_PROJECT_TAGS}" STREQUAL "-") 1592 if(NOT "${_alltags}" STREQUAL "") 1593 set(${_result} FALSE PARENT_SCOPE) 1594 return() 1595 endif() 1596 endif() 1597 set(_is_good FALSE) 1598 set(_hasp FALSE) 1599 foreach(_tag IN LISTS NCBI_PTBCFG_PROJECT_TAGS) 1600 if("${_tag}" STREQUAL "") 1601 continue() 1602 endif() 1603 if(${_tag} STREQUAL "*") 1604 set(_is_good TRUE) 1605 continue() 1606 endif() 1607 NCBI_util_parse_sign( ${_tag} _value _negate) 1608 if(_negate) 1609 if( ${_value} IN_LIST _alltags) 1610 set(${_result} FALSE PARENT_SCOPE) 1611 return() 1612 endif() 1613 else() 1614 set(_hasp TRUE) 1615 if( ${_value} IN_LIST _alltags) 1616 set(_is_good TRUE) 1617 endif() 1618 endif() 1619 endforeach() 1620 if(NOT _is_good AND _hasp) 1621 set(${_result} FALSE PARENT_SCOPE) 1622 return() 1623 endif() 1624 endif() 1625 1626 if(NOT "${NCBI_PTBCFG_PROJECT_LIST}" STREQUAL "") 1627 set(_is_good FALSE) 1628 set(_hasp FALSE) 1629 if(DEFINED NCBI_PTB_THIS_SRC_ROOT) 1630 set(_src_root ${NCBI_PTB_THIS_SRC_ROOT}) 1631 else() 1632 set(_src_root ${NCBI_SRC_ROOT}) 1633 endif() 1634 foreach(_dir IN LISTS NCBI_PTBCFG_PROJECT_LIST) 1635 if("${_dir}" STREQUAL "") 1636 continue() 1637 endif() 1638 if(${_dir} STREQUAL "*") 1639 set(_is_good TRUE) 1640 continue() 1641 endif() 1642 NCBI_util_parse_sign( ${_dir} _value _negate) 1643 if(_negate) 1644 NCBI_util_match_path(${NCBI_CURRENT_SOURCE_DIR} ${_src_root}/${_value} _match) 1645 if(_match) 1646 set(${_result} FALSE PARENT_SCOPE) 1647 return() 1648 endif() 1649 else() 1650 set(_hasp TRUE) 1651 NCBI_util_match_path(${NCBI_CURRENT_SOURCE_DIR} ${_src_root}/${_value} _match) 1652 if(_match) 1653 set(_is_good TRUE) 1654 endif() 1655 endif() 1656 endforeach() 1657 if (NOT _is_good AND _hasp) 1658 set(${_result} FALSE PARENT_SCOPE) 1659 return() 1660 endif() 1661 endif() 1662 1663 if(NOT "${NCBI_PTBCFG_PROJECT_TARGETS}" STREQUAL "" AND NOT "${NCBI_PROJECT}" STREQUAL "") 1664 set(_is_good FALSE) 1665 set(_hasp FALSE) 1666 foreach(_prj IN LISTS NCBI_PTBCFG_PROJECT_TARGETS) 1667 if("${_prj}" STREQUAL "") 1668 continue() 1669 endif() 1670 if (${_prj} STREQUAL "*") 1671 set(_is_good TRUE) 1672 continue() 1673 endif() 1674 NCBI_util_parse_sign( ${_prj} _value _negate) 1675 if (_negate) 1676 if (${NCBI_PROJECT} MATCHES ${_value}) 1677 set(${_result} FALSE PARENT_SCOPE) 1678 return() 1679 endif() 1680 else() 1681 set(_hasp TRUE) 1682 if (${NCBI_PROJECT} MATCHES ${_value}) 1683 set(_is_good TRUE) 1684 endif() 1685 endif() 1686 endforeach() 1687 if (NOT _is_good AND _hasp) 1688 set(${_result} FALSE PARENT_SCOPE) 1689 return() 1690 endif() 1691 endif() 1692 set(${_result} TRUE PARENT_SCOPE) 1693endfunction() 1694 1695############################################################################## 1696function(NCBI_internal_print_project_info _prj) 1697 message("=============================================================================") 1698 get_property(_dir GLOBAL PROPERTY NCBI_PTBPROP_DIR_${_prj}) 1699 message("PROJECT: ${_prj} (${_dir})") 1700 get_property(_x GLOBAL PROPERTY NCBI_PTBPROP_REQUIRES_${_prj}) 1701 if(NOT "${_x}" STREQUAL "") 1702 list(SORT _x) 1703 message(" REQUIRES: ${_x}") 1704 endif() 1705 get_property(_x GLOBAL PROPERTY NCBI_PTBPROP_COMPONENTS_${_prj}) 1706 if(NOT "${_x}" STREQUAL "") 1707 list(SORT _x) 1708 message(" OPTIONAL COMPONENTS: ${_x}") 1709 endif() 1710 get_property(_x GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${_prj}) 1711 if(NOT "${_x}" STREQUAL "") 1712 message(" DEPENDENCIES: ${_x}") 1713 set(_needless "") 1714 foreach(_dep IN LISTS _x) 1715 get_property(_y GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${_dep}) 1716 if(NOT "${_y}" STREQUAL "") 1717 list(SORT _y) 1718 foreach(_subdep IN LISTS _y) 1719 if(${_subdep} IN_LIST _x) 1720 list(APPEND _needless ${_subdep}) 1721 endif() 1722 endforeach() 1723 endif() 1724 endforeach() 1725 if(NOT "${_needless}" STREQUAL "") 1726 list(REMOVE_DUPLICATES _needless) 1727 message(" NEEDLESS DEPENDENCIES: ${_needless}") 1728 endif() 1729 endif() 1730 get_property(_x GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${_prj}) 1731 if(NOT "${_x}" STREQUAL "") 1732 list(SORT _x) 1733 message("-----------------------------------------------------------------------------") 1734 message(" ALL DEPENDENCIES: ${_x}") 1735 foreach(_dep IN LISTS _x) 1736 get_property(_dir GLOBAL PROPERTY NCBI_PTBPROP_DIR_${_dep}) 1737 message(" ${_dep} (${_dir})") 1738 get_property(_y GLOBAL PROPERTY NCBI_PTBPROP_REQUIRES_${_dep}) 1739 if(NOT "${_y}" STREQUAL "") 1740 list(SORT _y) 1741 message(" REQUIRES: ${_y}") 1742 endif() 1743 get_property(_y GLOBAL PROPERTY NCBI_PTBPROP_COMPONENTS_${_dep}) 1744 if(NOT "${_y}" STREQUAL "") 1745 list(SORT _y) 1746 message(" OPTIONAL COMPONENTS: ${_y}") 1747 endif() 1748 get_property(_y GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${_dep}) 1749 if(NOT "${_y}" STREQUAL "") 1750 list(SORT _y) 1751 message(" DEPENDENCIES: ${_y}") 1752 endif() 1753 endforeach() 1754 endif() 1755 get_property(_x GLOBAL PROPERTY NCBI_PTBPROP_IMPLREQ_${_prj}) 1756 if(NOT "${_x}" STREQUAL "") 1757 message("-----------------------------------------------------------------------------") 1758 message(" ALL REQUIRED COMPONENTS: ${_x}") 1759 foreach(_req IN LISTS _x) 1760 if (${_req}) 1761 message(" ${_req}: ${${_req}}") 1762 elseif (NCBI_REQUIRE_${_req}_FOUND) 1763 message(" _${_req}: ${NCBI_REQUIRE_${_req}_FOUND}") 1764 elseif (NCBI_COMPONENT_${_req}_FOUND) 1765 message(" ${_req}") 1766 if (DEFINED NCBI_COMPONENT_${_req}_INCLUDE) 1767 message(" INCLUDE: ${NCBI_COMPONENT_${_req}_INCLUDE}") 1768 endif() 1769 if (DEFINED NCBI_COMPONENT_${_req}_DEFINES) 1770 message(" DEFINES: ${NCBI_COMPONENT_${_req}_DEFINES}") 1771 endif() 1772 if (DEFINED NCBI_COMPONENT_${_req}_LIBS) 1773 message(" LIBS: ${NCBI_COMPONENT_${_req}_LIBS}") 1774 endif() 1775 if (DEFINED NCBI_COMPONENT_${_req}_BINPATH) 1776 message(" BINPATH: ${NCBI_COMPONENT_${_req}_BINPATH}") 1777 endif() 1778 else() 1779 message(" ${_req} not defined") 1780 endif() 1781 endforeach() 1782 endif() 1783 message("=============================================================================") 1784endfunction() 1785 1786############################################################################## 1787function(NCBI_internal_print_report _caption _counter) 1788 set(_report "") 1789 foreach( _type IN ITEMS CONSOLEAPP GUIAPP STATIC SHARED CUSTOM) 1790 get_property(_cnt GLOBAL PROPERTY NCBI_PTBPROP_${_counter}_${_type}) 1791 if( NOT "${_cnt}" STREQUAL "" AND "${_cnt}" GREATER 0) 1792 if( NOT "${_report}" STREQUAL "") 1793 string(APPEND _report ",") 1794 endif() 1795 string(APPEND _report " ${_cnt} ") 1796 if( ${_type} STREQUAL "CONSOLEAPP") 1797 string(APPEND _report "console app") 1798 elseif( ${_type} STREQUAL "GUIAPP") 1799 string(APPEND _report "GUI app") 1800 elseif( ${_type} STREQUAL "STATIC") 1801 string(APPEND _report "static lib") 1802 elseif( ${_type} STREQUAL "SHARED") 1803 string(APPEND _report "shared lib") 1804 elseif( ${_type} STREQUAL "CUSTOM") 1805 string(APPEND _report "custom target") 1806 endif() 1807 if( ${_cnt} GREATER 1) 1808 string(APPEND _report "s") 1809 endif() 1810 endif() 1811 endforeach() 1812 message("${_caption}: ${_report}") 1813endfunction() 1814 1815############################################################################## 1816function(NCBI_internal_tweak_debugging_env) 1817 if (DEFINED NCBI_EXTERNAL_TREE_ROOT AND MSVC AND BUILD_SHARED_LIBS) 1818 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "CONSOLEAPP" OR ${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "GUIAPP") 1819 set(_file "${CMAKE_CURRENT_BINARY_DIR}/${NCBI_PROJECT}.vcxproj.user") 1820 set(_bin "${NCBI_EXTERNAL_BUILD_ROOT}/${NCBI_DIRNAME_RUNTIME}") 1821 string(REPLACE "/" "\\" _bin ${_bin}) 1822 if (NOT EXISTS "${_file}") 1823 set(_info) 1824 list(APPEND _info "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n") 1825 list(APPEND _info "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n") 1826 list(APPEND _info " <PropertyGroup>\n") 1827 list(APPEND _info " <LocalDebuggerEnvironment>PATH=${_bin}\\\$(Configuration)\;\$(VCRedistPaths)%PATH%\n") 1828 list(APPEND _info "</LocalDebuggerEnvironment>\n") 1829 list(APPEND _info " <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n") 1830 list(APPEND _info " </PropertyGroup>\n") 1831 list(APPEND _info "</Project>\n") 1832 file(WRITE ${_file} ${_info}) 1833 endif() 1834 endif() 1835 endif() 1836endfunction() 1837 1838############################################################################## 1839function(NCBI_internal_add_project) 1840 1841 if (DEFINED NCBI_${NCBI_PROJECT}_PARTS AND NOT NCBI_PTBCFG_ALLOW_COMPOSITE) 1842 if (NOT NCBI_PTBMODE_COLLECT_DEPS) 1843 if (NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1844 message("${NCBI_PROJECT_ID} (${NCBI_CURRENT_SOURCE_DIR}) is excluded by configuration settings") 1845 endif() 1846 endif() 1847 if ("${ARGC}" GREATER "0") 1848 set(${ARGV0} FALSE PARENT_SCOPE) 1849 endif() 1850 return() 1851 endif() 1852 1853 get_property(_hosted GLOBAL PROPERTY NCBI_PTBPROP_HOSTID_${NCBI_PROJECT_ID}) 1854 if ("${_hosted}" STREQUAL "") 1855 get_property(_hosted GLOBAL PROPERTY NCBI_PTBPROP_HOST_${NCBI_PROJECT}) 1856 endif() 1857 1858 if (NCBI_PTBCFG_ENABLE_COLLECTOR AND NOT NCBI_PTBMODE_PARTS AND NOT NCBI_PTBMODE_COLLECT_DEPS) 1859 if(DEFINED NCBI_PTB_ALLOWED_PROJECTS) 1860 if(NOT ${NCBI_PROJECT} IN_LIST NCBI_PTB_ALLOWED_PROJECTS) 1861 if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1862 message("${NCBI_PROJECT_ID} (${NCBI_CURRENT_SOURCE_DIR}) is excluded by user's request") 1863 endif() 1864 if ("${ARGC}" GREATER "0") 1865 set(${ARGV0} FALSE PARENT_SCOPE) 1866 endif() 1867 return() 1868 endif() 1869 endif() 1870 1871 if (NOT "${_hosted}" STREQUAL "") 1872 if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1873 message("${NCBI_PROJECT_ID} (${NCBI_CURRENT_SOURCE_DIR}) is excluded because it is part of ${_hosted}") 1874 endif() 1875 if ("${ARGC}" GREATER "0") 1876 set(${ARGV0} FALSE PARENT_SCOPE) 1877 endif() 1878 return() 1879 endif() 1880 endif() 1881 1882 if(NOT NCBI_PTBCFG_ENABLE_COLLECTOR AND NOT NCBI_PTBMODE_PARTS) 1883 get_property(_count GLOBAL PROPERTY NCBI_PTBPROP_TOTAL_${NCBI_${NCBI_PROJECT}_TYPE}) 1884 math(EXPR _count "${_count} + 1") 1885 set_property(GLOBAL PROPERTY NCBI_PTBPROP_TOTAL_${NCBI_${NCBI_PROJECT}_TYPE} ${_count}) 1886 NCBI_internal_process_project_filters(_allowed) 1887 if (NOT _allowed) 1888 if ("${ARGC}" GREATER "0") 1889 set(${ARGV0} FALSE PARENT_SCOPE) 1890 endif() 1891 return() 1892 endif() 1893 endif() 1894 1895 if (NCBI_PTBMODE_COLLECT_DEPS) 1896 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${NCBI_PROJECT} SET) 1897 if (_prjdeps AND NOT DEFINED NCBI_${NCBI_PROJECT}_PARTS) 1898# get_property(_dir GLOBAL PROPERTY NCBI_PTBPROP_DIR_${NCBI_PROJECT}) 1899# message("WARNING: Target ${NCBI_PROJECT_ID} (${NCBI_CURRENT_SOURCE_DIR}) is excluded") 1900# message(" because there is already a target with the same name in ${_dir}") 1901 if ("${ARGC}" GREATER "0") 1902 set(${ARGV0} FALSE PARENT_SCOPE) 1903 endif() 1904 return() 1905 endif() 1906 endif() 1907 1908if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1909message("-----------------------------------") 1910message("NCBI_PROJECT = ${NCBI_PROJECT}") 1911message(" TYPE = ${NCBI_${NCBI_PROJECT}_TYPE}") 1912message(" LOCATION = ${NCBI_CURRENT_SOURCE_DIR}") 1913message(" SOURCES = ${NCBI_${NCBI_PROJECT}_SOURCES} ${NCBI_${NCBI_PROJECT}_GENERATED_SOURCES}") 1914message(" RESOURCES = ${NCBI_${NCBI_PROJECT}_RESOURCES}") 1915message(" HEADERS = ${NCBI_${NCBI_PROJECT}_HEADERS}") 1916message(" REQUIRES = ${NCBI_${NCBI_PROJECT}_REQUIRES}") 1917message(" COMPONENTS = ${NCBI_${NCBI_PROJECT}_COMPONENTS}") 1918message(" NOPCH = ${NCBI_${NCBI_PROJECT}_NOPCH}") 1919message(" NCBILIB = ${NCBI_${NCBI_PROJECT}_NCBILIB}") 1920message(" EXTLIB = ${NCBI_${NCBI_PROJECT}_EXTLIB}") 1921message(" INCLUDES = ${NCBI_${NCBI_PROJECT}_INCLUDES}") 1922message(" DEFINES = ${NCBI_${NCBI_PROJECT}_DEFINES}") 1923message(" TAGS = ${NCBI_${NCBI_PROJECT}_PROJTAG}") 1924endif() 1925 1926 if (DEFINED NCBI_${NCBI_PROJECT}_PARTS) 1927 NCBI_internal_process_parts(_result) 1928 if(NOT _result) 1929 if ("${ARGC}" GREATER "0") 1930 set(${ARGV0} FALSE PARENT_SCOPE) 1931 endif() 1932 return() 1933 endif() 1934 endif() 1935 1936 set(NCBITMP_INCLUDES ${NCBITMP_PROJECT_INCLUDES} ${NCBI__INCLUDES} ${NCBI_${NCBI_PROJECT}_INCLUDES}) 1937 set(NCBITMP_DEFINES ${NCBITMP_PROJECT_DEFINES} ${NCBI__DEFINES} ${NCBI_${NCBI_PROJECT}_DEFINES}) 1938 set(NCBITMP_NCBILIB ${NCBITMP_PROJECT_NCBILIB} ${NCBI__NCBILIB} ${NCBI_${NCBI_PROJECT}_NCBILIB}) 1939 set(NCBITMP_EXTLIB ${NCBITMP_PROJECT_EXTLIB} ${NCBI__EXTLIB} ${NCBI_${NCBI_PROJECT}_EXTLIB}) 1940 1941 NCBI_internal_process_project_requires() 1942 if ( NOT "${NCBITMP_REQUIRE_NOTFOUND}" STREQUAL "" AND NOT NCBI_PTBMODE_COLLECT_DEPS) 1943 message("${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}) is excluded because of unmet requirements: ${NCBITMP_REQUIRE_NOTFOUND}") 1944 if (NOT NCBI_PTBMODE_PARTS) 1945 if ("${ARGC}" GREATER "0") 1946 set(${ARGV0} FALSE PARENT_SCOPE) 1947 endif() 1948 return() 1949 endif() 1950 endif() 1951 1952 NCBI_internal_process_project_components() 1953 if ( NOT "${NCBITMP_COMPONENT_NOTFOUND}" STREQUAL "" AND NOT NCBI_PTBMODE_COLLECT_DEPS) 1954 message("${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}): cannot find optional component: ${NCBITMP_COMPONENT_NOTFOUND}") 1955 endif() 1956 if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 1957 message(" NCBITMP_INCLUDES = ${NCBITMP_INCLUDES}") 1958 message(" NCBITMP_INCLUDES_SYSTEM = ${NCBITMP_INCLUDES_SYSTEM}") 1959 message(" NCBITMP_DEFINES = ${NCBITMP_DEFINES}") 1960 message(" NCBITMP_NCBILIB = ${NCBITMP_NCBILIB}") 1961 message(" NCBITMP_EXTLIB = ${NCBITMP_EXTLIB}") 1962 endif() 1963 NCBI_internal_verify_ncbilibs() 1964 NCBI_internal_verify_libs() 1965 if ( NOT "${NCBITMP_TARGET_NOTFOUND}" STREQUAL "" AND NOT NCBI_PTBMODE_COLLECT_DEPS) 1966 message("${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}) is excluded because it depends on missing targets: ${NCBITMP_TARGET_NOTFOUND}") 1967 if (NOT NCBI_PTBMODE_PARTS) 1968 if ("${ARGC}" GREATER "0") 1969 set(${ARGV0} FALSE PARENT_SCOPE) 1970 endif() 1971 return() 1972 endif() 1973 endif() 1974 1975 if (NCBI_PTBMODE_COLLECT_DEPS) 1976 if (NCBI_PTBMODE_PARTS) 1977 set(NCBITMP_PROJECT_PART_IDS ${NCBITMP_PROJECT_PART_IDS} ${NCBI_PROJECT_ID} PARENT_SCOPE ) 1978 set(NCBITMP_PROJECT_PARTS ${NCBITMP_PROJECT_PARTS} ${NCBI_PROJECT_PARTNAME} PARENT_SCOPE ) 1979 endif() 1980 set_property(GLOBAL PROPERTY NCBI_PTBPROP_DEPS_${NCBI_PROJECT} "${NCBITMP_NCBILIB}") 1981 set_property(GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${NCBI_PROJECT} "${NCBITMP_NCBILIB}") 1982 set_property(GLOBAL PROPERTY NCBI_PTBPROP_DIR_${NCBI_PROJECT} "${NCBI_CURRENT_SOURCE_DIR}") 1983 if (DEFINED NCBI_${NCBI_PROJECT}_DATASPEC) 1984 set_property(GLOBAL PROPERTY NCBI_PTBPROP_DATASPEC_${NCBI_PROJECT} YES) 1985 endif() 1986 1987 if(NOT NCBI_PTBMODE_PARTS) 1988 get_property(_allprojects GLOBAL PROPERTY NCBI_PTBPROP_ALL_PROJECTS) 1989 set(_allprojects ${_allprojects} ${NCBI_PROJECT}) 1990 set_property(GLOBAL PROPERTY NCBI_PTBPROP_ALL_PROJECTS ${_allprojects}) 1991 1992 NCBI_internal_process_project_filters(_allowed) 1993 if (_allowed) 1994 get_property(_allowedprojects GLOBAL PROPERTY NCBI_PTBPROP_ALLOWED_PROJECTS) 1995 set(_allowedprojects ${_allowedprojects} ${NCBI_PROJECT}) 1996 set_property(GLOBAL PROPERTY NCBI_PTBPROP_ALLOWED_PROJECTS ${_allowedprojects}) 1997 endif() 1998 set(NCBI_PTB_CALLBACK_TARGET_PARSED ${NCBI_PROJECT}) 1999 2000 get_property(_count GLOBAL PROPERTY NCBI_PTBPROP_TOTAL_${NCBI_${NCBI_PROJECT}_TYPE}) 2001 math(EXPR _count "${_count} + 1") 2002 set_property(GLOBAL PROPERTY NCBI_PTBPROP_TOTAL_${NCBI_${NCBI_PROJECT}_TYPE} ${_count}) 2003 2004 if ("${ARGC}" GREATER "0") 2005 set(${ARGV0} FALSE PARENT_SCOPE) 2006 endif() 2007 return() 2008 endif() 2009 elseif(NOT NCBI_PTBCFG_ENABLE_COLLECTOR AND NCBI_PTBMODE_PARTS) 2010 set(NCBITMP_PROJECT_PART_IDS ${NCBITMP_PROJECT_PART_IDS} ${NCBI_PROJECT_ID} PARENT_SCOPE ) 2011 set(NCBITMP_PROJECT_PARTS ${NCBITMP_PROJECT_PARTS} ${NCBI_PROJECT_PARTNAME} PARENT_SCOPE ) 2012 endif() 2013 2014#message("processing ${NCBI_PROJECT_ID}") 2015 NCBI_internal_collect_sources() 2016 NCBI_internal_collect_dataspec() 2017 NCBI_internal_collect_headers() 2018 if (NCBI_PTBMODE_PARTS) 2019 set(NCBITMP_PROJECT_REQUIRES ${NCBITMP_PROJECT_REQUIRES} ${NCBI__REQUIRES} ${NCBI_${NCBI_PROJECT}_REQUIRES} PARENT_SCOPE) 2020 set(NCBITMP_PROJECT_COMPONENTS ${NCBITMP_PROJECT_COMPONENTS} ${NCBI__COMPONENTS} ${NCBI_${NCBI_PROJECT}_COMPONENTS} PARENT_SCOPE) 2021 set(NCBITMP_PROJECT_INCLUDES ${NCBITMP_PROJECT_INCLUDES} ${NCBI__INCLUDES} ${NCBI_${NCBI_PROJECT}_INCLUDES} PARENT_SCOPE) 2022 set(NCBITMP_PROJECT_DEFINES ${NCBITMP_PROJECT_DEFINES} ${NCBI__DEFINES} ${NCBI_${NCBI_PROJECT}_DEFINES} PARENT_SCOPE) 2023 set(NCBITMP_PROJECT_NCBILIB ${NCBITMP_PROJECT_NCBILIB} ${NCBI__NCBILIB} ${NCBI_${NCBI_PROJECT}_NCBILIB} PARENT_SCOPE) 2024 set(NCBITMP_PROJECT_EXTLIB ${NCBITMP_PROJECT_EXTLIB} ${NCBI__EXTLIB} ${NCBI_${NCBI_PROJECT}_EXTLIB} PARENT_SCOPE) 2025 set(NCBITMP_PROJECT_SOURCES ${NCBITMP_PROJECT_SOURCES} PARENT_SCOPE) 2026 set(NCBITMP_PROJECT_NOPCH ${NCBITMP_PROJECT_NOPCH} PARENT_SCOPE) 2027 set(NCBITMP_PROJECT_DATASPEC ${NCBITMP_PROJECT_DATASPEC} PARENT_SCOPE) 2028 set(NCBITMP_PROJECT_HEADERS ${NCBITMP_PROJECT_HEADERS} PARENT_SCOPE) 2029 if ("${ARGC}" GREATER "0") 2030 set(${ARGV0} FALSE PARENT_SCOPE) 2031 endif() 2032 return() 2033 endif() 2034 NCBI_internal_add_resources() 2035 NCBI_internal_add_dataspec() 2036 2037#---------------------------------------------------------------------------- 2038 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "STATIC") 2039 2040#message("add static library(${NCBI_PROJECT} STATIC ${NCBITMP_PROJECT_SOURCES} ${NCBITMP_PROJECT_HEADERS} ${NCBITMP_PROJECT_RESOURCES} ${NCBITMP_PROJECT_DATASPEC})") 2041#message("add static library ${NCBI_PROJECT}") 2042 add_library(${NCBI_PROJECT} STATIC ${NCBITMP_PROJECT_SOURCES} ${NCBITMP_PROJECT_HEADERS} ${NCBITMP_PROJECT_RESOURCES} ${NCBITMP_PROJECT_DATASPEC}) 2043 set(_suffix ${CMAKE_STATIC_LIBRARY_SUFFIX}) 2044 2045#---------------------------------------------------------------------------- 2046 elseif (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "SHARED") 2047 2048#message("add shared library(${NCBI_PROJECT} SHARED ${NCBITMP_PROJECT_SOURCES} ${NCBITMP_PROJECT_HEADERS} ${NCBITMP_PROJECT_RESOURCES} ${NCBITMP_PROJECT_DATASPEC})") 2049#message("add shared library ${NCBI_PROJECT}") 2050 add_library(${NCBI_PROJECT} SHARED ${NCBITMP_PROJECT_SOURCES} ${NCBITMP_PROJECT_HEADERS} ${NCBITMP_PROJECT_RESOURCES} ${NCBITMP_PROJECT_DATASPEC}) 2051 set(_suffix ${CMAKE_SHARED_LIBRARY_SUFFIX}) 2052 2053#---------------------------------------------------------------------------- 2054 elseif (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "CONSOLEAPP") 2055 2056#message("add_executable(${NCBI_PROJECT} ${NCBITMP_PROJECT_SOURCES} ${NCBITMP_PROJECT_HEADERS} ${NCBITMP_PROJECT_RESOURCES} ${NCBITMP_PROJECT_DATASPEC})") 2057#message("add executable ${NCBI_PROJECT}") 2058 add_executable(${NCBI_PROJECT} ${NCBITMP_PROJECT_SOURCES} ${NCBITMP_PROJECT_HEADERS} ${NCBITMP_PROJECT_RESOURCES} ${NCBITMP_PROJECT_DATASPEC}) 2059 set(_suffix ${CMAKE_EXECUTABLE_SUFFIX}) 2060 2061#---------------------------------------------------------------------------- 2062 elseif (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "GUIAPP") 2063 2064 add_executable(${NCBI_PROJECT} WIN32 ${NCBITMP_PROJECT_SOURCES} ${NCBITMP_PROJECT_HEADERS} ${NCBITMP_PROJECT_RESOURCES} ${NCBITMP_PROJECT_DATASPEC}) 2065 set(_suffix ${CMAKE_EXECUTABLE_SUFFIX}) 2066 2067#---------------------------------------------------------------------------- 2068 elseif (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "CUSTOM") 2069 2070 set(NCBI_${NCBI_PROJECT}_CALLBACK 0) 2071 variable_watch(NCBI_${NCBI_PROJECT}_CALLBACK ${NCBI_${NCBI_PROJECT}_DEFINITION}) 2072 set(NCBI_${NCBI_PROJECT}_CALLBACK 1) 2073 2074#---------------------------------------------------------------------------- 2075 else() 2076 2077 message("ERROR: ${NCBI_PROJECT} (${NCBI_CURRENT_SOURCE_DIR}) unsupported project type ${NCBI_${NCBI_PROJECT}_TYPE}") 2078 if ("${ARGC}" GREATER "0") 2079 set(${ARGV0} FALSE PARENT_SCOPE) 2080 endif() 2081 return() 2082 2083 endif() 2084 2085 if (DEFINED NCBI_DEFAULT_CFGPROPS) 2086 if(MSVC) 2087 set_target_properties(${NCBI_PROJECT} PROPERTIES VS_USER_PROPS "${NCBI_DEFAULT_CFGPROPS}") 2088 endif() 2089 endif() 2090 if (DEFINED NCBI_${NCBI_PROJECT}_OUTPUT) 2091 if(NOT DEFINED NCBI_EXTERNAL_TREE_ROOT AND NOT ${NCBI_PROJECT} STREQUAL ${NCBI_${NCBI_PROJECT}_OUTPUT}) 2092 get_property(_dir GLOBAL PROPERTY NCBI_PTBPROP_DIR_${NCBI_${NCBI_PROJECT}_OUTPUT}) 2093 if (NOT ${_dir} STREQUAL "" AND (NOT ${_dir} STREQUAL ${NCBI_CURRENT_SOURCE_DIR} OR TARGET ${NCBI_${NCBI_PROJECT}_OUTPUT})) 2094 message("WARNING: App target ${NCBI_${NCBI_PROJECT}_OUTPUT} (${NCBI_CURRENT_SOURCE_DIR}) cannot be created") 2095 message(" because there is already a target with the same name in ${_dir}") 2096 message(" App target ${NCBI_${NCBI_PROJECT}_OUTPUT} will be renamed into ${NCBI_PROJECT}") 2097 elseif(NOT NCBI_PTBCFG_ENABLE_COLLECTOR) 2098 message("WARNING: App target ${NCBI_${NCBI_PROJECT}_OUTPUT} (${NCBI_CURRENT_SOURCE_DIR}) cannot be created") 2099 message(" because there is already a target with the same name elsewhere") 2100 message(" App target ${NCBI_${NCBI_PROJECT}_OUTPUT} will be renamed into ${NCBI_PROJECT}") 2101 endif() 2102 endif() 2103 set_target_properties(${NCBI_PROJECT} PROPERTIES OUTPUT_NAME ${NCBI_${NCBI_PROJECT}_OUTPUT}) 2104 endif() 2105 2106 get_property(_count GLOBAL PROPERTY NCBI_PTBPROP_COUNT_${NCBI_${NCBI_PROJECT}_TYPE}) 2107 math(EXPR _count "${_count} + 1") 2108 set_property(GLOBAL PROPERTY NCBI_PTBPROP_COUNT_${NCBI_${NCBI_PROJECT}_TYPE} ${_count}) 2109 2110if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 2111message(" ADDED: ${NCBI_CURRENT_SOURCE_DIR}/${NCBI_PROJECT_ID}") 2112message(" NCBITMP_PROJECT_SOURCES ${NCBITMP_PROJECT_SOURCES}") 2113message(" NCBITMP_PROJECT_HEADERS ${NCBITMP_PROJECT_HEADERS}") 2114message(" NCBITMP_PROJECT_RESOURCES ${NCBITMP_PROJECT_RESOURCES}") 2115#message(" NCBI_SRC_ROOT ${NCBI_SRC_ROOT}") 2116#message(" NCBI_INC_ROOT ${NCBI_INC_ROOT}") 2117endif() 2118 2119 if (${NCBI_${NCBI_PROJECT}_TYPE} STREQUAL "CUSTOM") 2120 2121 get_property(_prjdeps GLOBAL PROPERTY NCBI_PTBPROP_DIRECT_DEPS_${NCBI_PROJECT}) 2122 if (NOT "${_prjdeps}" STREQUAL "") 2123 add_dependencies(${NCBI_PROJECT} ${_prjdeps}) 2124 endif() 2125 2126 else() 2127 target_include_directories(${NCBI_PROJECT} SYSTEM PRIVATE ${NCBITMP_INCLUDES_SYSTEM}) 2128 target_include_directories(${NCBI_PROJECT} PRIVATE ${NCBITMP_INCLUDES}) 2129 target_compile_definitions(${NCBI_PROJECT} PRIVATE ${NCBITMP_DEFINES}) 2130 2131if(OFF) 2132# this does not seem to have any effect 2133 if (XCODE AND NOT BUILD_SHARED_LIBS) 2134 set_target_properties(${NCBI_PROJECT} PROPERTIES XCODE_ATTRIBUTE_STANDARD_C_PLUS_PLUS_LIBRARY_TYPE "static") 2135 set_target_properties(${NCBI_PROJECT} PROPERTIES XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "YES") 2136 endif() 2137endif() 2138 2139#message("target_link_libraries: ${NCBI_PROJECT} ${NCBITMP_NCBILIB} ${NCBITMP_EXTLIB}") 2140 set(_libs ${NCBITMP_NCBILIB} ${NCBITMP_EXTLIB}) 2141 if ("${_libs}" STREQUAL "") 2142 set(_libs ${ORIG_LIBS}) 2143 endif() 2144 target_link_libraries( ${NCBI_PROJECT} ${_libs}) 2145 2146 if (DEFINED _suffix) 2147 set_target_properties( ${NCBI_PROJECT} PROPERTIES PROJECT_LABEL ${NCBI_PROJECT}${_suffix}) 2148 endif() 2149 NCBI_internal_define_precompiled_header_usage() 2150 endif() 2151 NCBI_internal_tweak_debugging_env() 2152 2153 set(NCBI_PTB_CALLBACK_TARGET_ADDED ${NCBI_PROJECT}) 2154 2155if(NCBI_VERBOSE_ALLPROJECTS OR NCBI_VERBOSE_PROJECT_${NCBI_PROJECT}) 2156message("-----------------------------------") 2157endif() 2158 2159 if ("${ARGC}" GREATER "0") 2160 set(${ARGV0} TRUE PARENT_SCOPE) 2161 endif() 2162endfunction() 2163 2164############################################################################## 2165############################################################################## 2166 2167macro(NCBI_util_load_file _file _result) 2168 get_filename_component(_path ${_file} DIRECTORY) 2169 if (EXISTS "${_file}" AND NOT IS_DIRECTORY "${_file}") 2170 file(STRINGS "${_file}" _list) 2171 foreach( _item IN LISTS _list) 2172 if ("${_item}" STREQUAL "") 2173 continue() 2174 endif() 2175 if ("${_item}" MATCHES "#") 2176 if ("${_item}" MATCHES "#include") 2177 string(REPLACE "#include" "" _item ${_item}) 2178 string(REPLACE " " "" _item ${_item}) 2179 string(REPLACE "\"" "" _item ${_item}) 2180 NCBI_util_load_file(${_path}/${_item} ${_result}) 2181 endif() 2182 continue() 2183 endif() 2184 string(REPLACE " " ";" _tmp ${_item}) 2185 list(GET _tmp 0 _item) 2186 list(APPEND ${_result} ${_item}) 2187 endforeach() 2188 else() 2189 message("WARNING: unable to load ${_file}") 2190 endif() 2191endmacro() 2192 2193 2194if("${NCBI_PTBCFG_PROJECT_LIST}" STREQUAL "") 2195 unset(NCBI_PTBCFG_PROJECT_LIST) 2196endif() 2197if("${NCBI_PTBCFG_PROJECT_TAGS}" STREQUAL "") 2198 unset(NCBI_PTBCFG_PROJECT_TAGS) 2199endif() 2200if("${NCBI_PTBCFG_PROJECT_TARGETS}" STREQUAL "") 2201 unset(NCBI_PTBCFG_PROJECT_TARGETS) 2202endif() 2203 2204if(DEFINED NCBI_PTBCFG_PROJECT_LIST AND EXISTS "${NCBI_PTBCFG_PROJECT_LIST}") 2205 if (NOT IS_DIRECTORY "${NCBI_PTBCFG_PROJECT_LIST}") 2206 string(REPLACE "\\" "/" NCBI_PTBCFG_PROJECT_LIST ${NCBI_PTBCFG_PROJECT_LIST}) 2207 NCBI_util_load_file("${NCBI_PTBCFG_PROJECT_LIST}" NCBI_PTBCFG_PROJECT_LIST) 2208 list(REMOVE_AT NCBI_PTBCFG_PROJECT_LIST 0) 2209 list(REMOVE_DUPLICATES NCBI_PTBCFG_PROJECT_LIST) 2210 endif() 2211endif() 2212set(_lst ${NCBI_PTBCFG_PROJECT_LIST}) 2213set(NCBI_PTBCFG_PROJECT_LIST "") 2214foreach(_item IN LISTS _lst) 2215 string(REPLACE "\\" "/" _item ${_item}) 2216 list(APPEND NCBI_PTBCFG_PROJECT_LIST ${_item}) 2217endforeach() 2218 2219if(DEFINED NCBI_PTBCFG_PROJECT_TAGS AND EXISTS "${NCBI_PTBCFG_PROJECT_TAGS}") 2220 if (NOT IS_DIRECTORY "${NCBI_PTBCFG_PROJECT_TAGS}") 2221 file(STRINGS "${NCBI_PTBCFG_PROJECT_TAGS}" NCBI_PTBCFG_PROJECT_TAGS) 2222 endif() 2223endif() 2224 2225if(DEFINED NCBI_PTBCFG_PROJECT_TARGETS AND EXISTS "${NCBI_PTBCFG_PROJECT_TARGETS}") 2226 if (NOT IS_DIRECTORY "${NCBI_PTBCFG_PROJECT_TARGETS}") 2227 file(STRINGS "${NCBI_PTBCFG_PROJECT_TARGETS}" NCBI_PTBCFG_PROJECT_TARGETS) 2228 endif() 2229endif() 2230 2231if(DEFINED NCBI_VERBOSE_PROJECTS) 2232 foreach(_prj IN LISTS NCBI_VERBOSE_PROJECTS) 2233 if ("${_prj}" STREQUAL "*") 2234 set(NCBI_VERBOSE_ALLPROJECTS ON) 2235 else() 2236 set(NCBI_VERBOSE_PROJECT_${_prj} ON) 2237 endif() 2238 endforeach() 2239endif() 2240