@@ -13,7 +13,11 @@ if(WIN32)
13
13
set (CMAKE_SKIP_TEST_ALL_DEPENDENCY TRUE )
14
14
endif ()
15
15
16
- if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT ALLOW_IN_SOURCE)
16
+ #---We must not use CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR as that breaks the packages ---------
17
+ set (ROOT_MAIN_SOURCE_DIR "${CMAKE_SOURCE_DIR} " )
18
+ set (ROOT_MAIN_BINARY_DIR "${CMAKE_BINARY_DIR} " )
19
+
20
+ if (ROOT_MAIN_SOURCE_DIR STREQUAL ROOT_MAIN_BINARY_DIR AND NOT ALLOW_IN_SOURCE)
17
21
message (FATAL_ERROR
18
22
" ROOT must be built out-of-source.\n "
19
23
" Please see README/INSTALL for more information." )
@@ -45,10 +49,10 @@ project(ROOT)
45
49
set (ENV{LANG} C)
46
50
47
51
#---Set paths where to put the libraries, executables and headers------------------------------
48
- file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR } /lib) # prevent mkdir races
49
- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR } /lib)
50
- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR } /lib)
51
- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR } /bin)
52
+ file (MAKE_DIRECTORY ${ROOT_MAIN_BINARY_DIR } /lib) # prevent mkdir races
53
+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ROOT_MAIN_BINARY_DIR } /lib)
54
+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ROOT_MAIN_BINARY_DIR } /lib)
55
+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ROOT_MAIN_BINARY_DIR } /bin)
52
56
53
57
# Set permissions for installed folders and subfolders that come from the source tree in case
54
58
# the permissions in the source tree are wrong since the install command will preserve them
@@ -74,19 +78,19 @@ if(NOT $ENV{ROOTSYS} STREQUAL "")
74
78
# if we leave the ':' it will result in an empty entry in the CMAKE_PREFIX_PATH
75
79
# which will interpreted as the current directory.
76
80
strip_path("CMAKE_PREFIX_PATH" "$ENV{ROOTSYS} " )
77
- set (ENV{ROOTSYS} ${CMAKE_BINARY_DIR } )
81
+ set (ENV{ROOTSYS} ${ROOT_MAIN_BINARY_DIR } )
78
82
endif ()
79
83
80
- set (ROOTSYS ${CMAKE_BINARY_DIR } )
81
- set (HEADER_OUTPUT_PATH ${CMAKE_BINARY_DIR } /include )
84
+ set (ROOTSYS ${ROOT_MAIN_BINARY_DIR } )
85
+ set (HEADER_OUTPUT_PATH ${ROOT_MAIN_BINARY_DIR } /include )
82
86
83
87
#---Set the ROOT version--------------------------------------------------------------------
84
88
include (cmake/modules/SetROOTVersion.cmake)
85
89
86
90
message (STATUS "Building ROOT version ${ROOT_FULL_VERSION} " )
87
91
88
92
#---Where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked-------------
89
- set (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR } /cmake/modules)
93
+ set (CMAKE_MODULE_PATH ${ROOT_MAIN_SOURCE_DIR } /cmake/modules)
90
94
91
95
#---Enable Folders in IDE like Visual Studio----------------------------------------------------
92
96
set_property (GLOBAL PROPERTY USE_FOLDERS ON )
@@ -259,7 +263,7 @@ if(asan)
259
263
endif ()
260
264
261
265
if (NOT MSVC )
262
- set (ASAN_EXTRA_LD_PRELOAD "${CMAKE_BINARY_DIR } /lib/${CMAKE_SHARED_LIBRARY_PREFIX} ROOTSanitizerConfig${CMAKE_SHARED_LIBRARY_SUFFIX} :${ASAN_RUNTIME_LIBRARY} " )
266
+ set (ASAN_EXTRA_LD_PRELOAD "${ROOT_MAIN_BINARY_DIR } /lib/${CMAKE_SHARED_LIBRARY_PREFIX} ROOTSanitizerConfig${CMAKE_SHARED_LIBRARY_SUFFIX} :${ASAN_RUNTIME_LIBRARY} " )
263
267
endif ()
264
268
265
269
foreach (item IN LISTS ASAN_EXTRA_CXX_FLAGS)
@@ -313,8 +317,8 @@ endforeach()
313
317
#---Move (copy) directories to binary tree------------------------------------------------------
314
318
set (stamp_file ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /move_artifacts.stamp)
315
319
add_custom_command (OUTPUT ${stamp_file}
316
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR } /LICENSE ${CMAKE_BINARY_DIR } /LICENSE
317
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR } /README ${CMAKE_BINARY_DIR } /README
320
+ COMMAND ${CMAKE_COMMAND} -E copy ${ROOT_MAIN_SOURCE_DIR } /LICENSE ${ROOT_MAIN_BINARY_DIR } /LICENSE
321
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${ROOT_MAIN_SOURCE_DIR } /README ${ROOT_MAIN_BINARY_DIR } /README
318
322
COMMAND ${CMAKE_COMMAND} -E touch ${stamp_file}
319
323
COMMENT "Copying directories such as etc, icons, fonts, js, ui5, etc. to build area" )
320
324
@@ -335,11 +339,11 @@ foreach(dir_to_copy ${directories_to_copy})
335
339
list (FILTER artifacts_in EXCLUDE REGEX "\. (d|swp|so|dylib|lib|dll|pcm|bak)$" )
336
340
337
341
set (artifacts_out ${artifacts_in} )
338
- list (TRANSFORM artifacts_out REPLACE ${CMAKE_SOURCE_DIR } ${CMAKE_BINARY_DIR } )
342
+ list (TRANSFORM artifacts_out REPLACE ${ROOT_MAIN_SOURCE_DIR } ${ROOT_MAIN_BINARY_DIR } )
339
343
list (APPEND all_artifacts ${artifacts_out} )
340
344
341
345
add_custom_command (OUTPUT ${artifacts_out}
342
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR } /${dir_to_copy} ${CMAKE_BINARY_DIR } /${dir_to_copy}
346
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${ROOT_MAIN_SOURCE_DIR } /${dir_to_copy} ${ROOT_MAIN_BINARY_DIR } /${dir_to_copy}
343
347
COMMENT "Copy ${dir_to_copy} "
344
348
DEPENDS ${artifacts_in} )
345
349
endforeach ()
@@ -353,11 +357,11 @@ add_subdirectory (interpreter)
353
357
# Update etc/gitinfo.txt for every build.
354
358
add_custom_target (gitinfotxt
355
359
ALL
356
- COMMAND ${CMAKE_COMMAND} -DSRCDIR=${CMAKE_SOURCE_DIR } -DBINDIR=${CMAKE_BINARY_DIR } -P ${CMAKE_SOURCE_DIR } /cmake/modules/UpdateGitInfo.cmake
360
+ COMMAND ${CMAKE_COMMAND} -DSRCDIR=${ROOT_MAIN_SOURCE_DIR } -DBINDIR=${ROOT_MAIN_BINARY_DIR } -P ${ROOT_MAIN_SOURCE_DIR } /cmake/modules/UpdateGitInfo.cmake
357
361
COMMENT "Updating etc/gitinfo.txt."
358
- BYPRODUCTS ${CMAKE_BINARY_DIR } /etc/gitinfo.txt
362
+ BYPRODUCTS ${ROOT_MAIN_BINARY_DIR } /etc/gitinfo.txt
359
363
)
360
- install (FILES ${CMAKE_BINARY_DIR } /etc/gitinfo.txt DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} )
364
+ install (FILES ${ROOT_MAIN_BINARY_DIR } /etc/gitinfo.txt DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} )
361
365
362
366
#---Recurse into the given subdirectories. This does not actually cause another cmake executable
363
367
# to run. The same process will walk through the project's entire directory structure.
@@ -408,17 +412,17 @@ if(MSVC)
408
412
else ()
409
413
set (_os_cat "cat" )
410
414
endif ()
411
- file (TO_NATIVE_PATH "${CMAKE_BINARY_DIR } /include/module.modulemap.extra" _from_native)
412
- file (TO_NATIVE_PATH "${CMAKE_BINARY_DIR } /include/ROOT.modulemap" _to_native)
415
+ file (TO_NATIVE_PATH "${ROOT_MAIN_BINARY_DIR } /include/module.modulemap.extra" _from_native)
416
+ file (TO_NATIVE_PATH "${ROOT_MAIN_BINARY_DIR } /include/ROOT.modulemap" _to_native)
413
417
414
- add_custom_target (copymodulemap DEPENDS "${CMAKE_BINARY_DIR } /include/ROOT.modulemap" )
418
+ add_custom_target (copymodulemap DEPENDS "${ROOT_MAIN_BINARY_DIR } /include/ROOT.modulemap" )
415
419
add_custom_command (
416
- OUTPUT "${CMAKE_BINARY_DIR } /include/ROOT.modulemap"
417
- DEPENDS cmake/unix /module.modulemap "${CMAKE_BINARY_DIR } /include/module.modulemap.extra"
418
- COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR } /cmake/unix/module.modulemap" "${CMAKE_BINARY_DIR } /include/ROOT.modulemap"
420
+ OUTPUT "${ROOT_MAIN_BINARY_DIR } /include/ROOT.modulemap"
421
+ DEPENDS cmake/unix /module.modulemap "${ROOT_MAIN_BINARY_DIR } /include/module.modulemap.extra"
422
+ COMMAND ${CMAKE_COMMAND} -E copy "${ROOT_MAIN_SOURCE_DIR } /cmake/unix/module.modulemap" "${ROOT_MAIN_BINARY_DIR } /include/ROOT.modulemap"
419
423
COMMAND ${_os_cat} "${_from_native} " >> "${_to_native} "
420
424
)
421
- install (FILES "${CMAKE_BINARY_DIR } /include/ROOT.modulemap" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers)
425
+ install (FILES "${ROOT_MAIN_BINARY_DIR } /include/ROOT.modulemap" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers)
422
426
423
427
add_dependencies (move_headers copymodulemap)
424
428
@@ -429,9 +433,9 @@ get_property(__modulemap_extra_content GLOBAL PROPERTY ROOT_CXXMODULES_EXTRA_MOD
429
433
string (REPLACE ";" "" __modulemap_extra_content "${__modulemap_extra_content} " )
430
434
# Write module.modulemap.extra to a temporary file first, to not touch module.modulemap.extra
431
435
# if it's unchanged.
432
- file (WRITE "${CMAKE_BINARY_DIR } /include/module.modulemap.extra.tmp" "${__modulemap_extra_content} " )
433
- configure_file ("${CMAKE_BINARY_DIR } /include/module.modulemap.extra.tmp"
434
- "${CMAKE_BINARY_DIR } /include/module.modulemap.extra"
436
+ file (WRITE "${ROOT_MAIN_BINARY_DIR } /include/module.modulemap.extra.tmp" "${__modulemap_extra_content} " )
437
+ configure_file ("${ROOT_MAIN_BINARY_DIR } /include/module.modulemap.extra.tmp"
438
+ "${ROOT_MAIN_BINARY_DIR } /include/module.modulemap.extra"
435
439
COPYONLY )
436
440
437
441
# From now on we handled all exposed module and want to make all new modulemaps private to ROOT.
@@ -462,9 +466,9 @@ else()
462
466
463
467
if (WIN32 )
464
468
list (APPEND incdirs
465
- ${CMAKE_SOURCE_DIR } /graf2d/win32gdk/gdk/src
466
- ${CMAKE_SOURCE_DIR } /graf2d/win32gdk/gdk/src/gdk
467
- ${CMAKE_SOURCE_DIR } /graf2d/win32gdk/gdk/src/glib
469
+ ${ROOT_MAIN_SOURCE_DIR } /graf2d/win32gdk/gdk/src
470
+ ${ROOT_MAIN_SOURCE_DIR } /graf2d/win32gdk/gdk/src/gdk
471
+ ${ROOT_MAIN_SOURCE_DIR } /graf2d/win32gdk/gdk/src/glib
468
472
)
469
473
endif ()
470
474
@@ -484,26 +488,26 @@ else()
484
488
etc/dictpch/allHeaders.h
485
489
etc/dictpch/allLinkDefs.h
486
490
COMMAND
487
- ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR } /cmake/unix /makepchinput.py
488
- ${CMAKE_SOURCE_DIR } . ${pyroot_legacy} ${__cling_pch}
491
+ ${Python3_EXECUTABLE} ${ROOT_MAIN_SOURCE_DIR } /cmake/unix /makepchinput.py
492
+ ${ROOT_MAIN_SOURCE_DIR } . ${pyroot_legacy} ${__cling_pch}
489
493
COMMAND
490
494
${CMAKE_COMMAND} -E env ROOTIGNOREPREFIX=1 ${Python3_EXECUTABLE}
491
- ${CMAKE_SOURCE_DIR } /etc/dictpch/makepch.py etc/allDict.cxx.pch
492
- ${__allIncludes} -I${CMAKE_BINARY_DIR } /include -I${CMAKE_SOURCE_DIR } /core
495
+ ${ROOT_MAIN_SOURCE_DIR } /etc/dictpch/makepch.py etc/allDict.cxx.pch
496
+ ${__allIncludes} -I${ROOT_MAIN_BINARY_DIR } /include -I${ROOT_MAIN_SOURCE_DIR } /core
493
497
DEPENDS
494
498
rootcling ${__pch_dependencies} ${__pch_dictionaries}
495
- ${CMAKE_SOURCE_DIR } /cmake/unix /makepchinput.py
496
- ${CMAKE_SOURCE_DIR } /etc/dictpch/makepch.py
499
+ ${ROOT_MAIN_SOURCE_DIR } /cmake/unix /makepchinput.py
500
+ ${ROOT_MAIN_SOURCE_DIR } /etc/dictpch/makepch.py
497
501
)
498
502
add_custom_target (onepcm ALL DEPENDS etc/allDict.cxx.pch)
499
- install (FILES ${CMAKE_BINARY_DIR } /etc/allDict.cxx.pch DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} )
500
- install (DIRECTORY ${CMAKE_BINARY_DIR } /etc/dictpch DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} )
503
+ install (FILES ${ROOT_MAIN_BINARY_DIR } /etc/allDict.cxx.pch DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} )
504
+ install (DIRECTORY ${ROOT_MAIN_BINARY_DIR } /etc/dictpch DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} )
501
505
endif ()
502
506
503
507
# FIXME: move installation of PCMS in ROOT_GENERATE_DICTIONARY().
504
508
# We are excluding directories, which are accidentaly copied via unxpected behaviour of install(DIRECTORY ..)
505
509
install (
506
- DIRECTORY ${CMAKE_BINARY_DIR } /lib/
510
+ DIRECTORY ${ROOT_MAIN_BINARY_DIR } /lib/
507
511
DESTINATION ${CMAKE_INSTALL_LIBDIR}
508
512
FILES_MATCHING
509
513
PATTERN "*.pcm"
@@ -547,42 +551,42 @@ add_custom_target(hsimple ALL DEPENDS tutorials/hsimple.root)
547
551
add_dependencies (hsimple onepcm)
548
552
if (WIN32 )
549
553
set (hsimple_cmd COMMAND ${CMAKE_COMMAND} -E env PATH ="${CMAKE_RUNTIME_OUTPUT_DIRECTORY} \\\; %PATH%"
550
- ROOTIGNOREPREFIX=1 ROOT_HIST=0 $<TARGET_FILE:root.exe> -l -q -b -n -x ${CMAKE_SOURCE_DIR } /tutorials/hsimple.C -e return)
554
+ ROOTIGNOREPREFIX=1 ROOT_HIST=0 $<TARGET_FILE:root.exe> -l -q -b -n -x ${ROOT_MAIN_SOURCE_DIR } /tutorials/hsimple.C -e return)
551
555
else ()
552
556
set (hsimple_cmd COMMAND ${MODULES_ROOT_INCPATH} ${ld_library_path} =${CMAKE_LIBRARY_OUTPUT_DIRECTORY} :$ENV{${ld_library_path} }
553
- ROOTIGNOREPREFIX=1 ROOT_HIST=0 $<TARGET_FILE:root.exe> -l -q -b -n -x ${CMAKE_SOURCE_DIR } /tutorials/hsimple.C -e return)
557
+ ROOTIGNOREPREFIX=1 ROOT_HIST=0 $<TARGET_FILE:root.exe> -l -q -b -n -x ${ROOT_MAIN_SOURCE_DIR } /tutorials/hsimple.C -e return)
554
558
endif ()
555
559
add_custom_command (OUTPUT tutorials/hsimple.root
556
560
${hsimple_cmd}
557
561
WORKING_DIRECTORY tutorials
558
562
DEPENDS $<TARGET_FILE:root.exe> Cling Hist Tree Gpad Graf HistPainter move_artifacts)
559
- install (FILES ${CMAKE_BINARY_DIR } /tutorials/hsimple.root DESTINATION ${CMAKE_INSTALL_TUTDIR} COMPONENT tests)
563
+ install (FILES ${ROOT_MAIN_BINARY_DIR } /tutorials/hsimple.root DESTINATION ${CMAKE_INSTALL_TUTDIR} COMPONENT tests)
560
564
561
565
if (runtime_cxxmodules)
562
566
add_dependencies (hsimple modules_idx)
563
567
endif ()
564
568
565
569
#---copy special headers required for building on Windows----------------------------------------
566
570
if (WIN32 )
567
- file (COPY cmake/win/w32pragma.h DESTINATION ${CMAKE_BINARY_DIR } /include /)
568
- file (COPY cmake/win/sehmap.h DESTINATION ${CMAKE_BINARY_DIR } /include /)
571
+ file (COPY cmake/win/w32pragma.h DESTINATION ${ROOT_MAIN_BINARY_DIR } /include /)
572
+ file (COPY cmake/win/sehmap.h DESTINATION ${ROOT_MAIN_BINARY_DIR } /include /)
569
573
endif ()
570
574
571
575
#---version--------------------------------------------------------------------------------------
572
576
if (NOT WIN32 )
573
- add_custom_target (version COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR } /cmake/unix /makeversion.py
574
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR } )
577
+ add_custom_target (version COMMAND ${Python3_EXECUTABLE} ${ROOT_MAIN_SOURCE_DIR } /cmake/unix /makeversion.py
578
+ WORKING_DIRECTORY ${ROOT_MAIN_SOURCE_DIR } )
575
579
endif ()
576
580
577
581
#---distribution commands------------------------------------------------------------------------
578
- add_custom_target (distsrc COMMAND ${CMAKE_SOURCE_DIR } /cmake/unix /makedistsrc.sh "${ROOT_FULL_VERSION} " "${CMAKE_SOURCE_DIR } " )
582
+ add_custom_target (distsrc COMMAND ${ROOT_MAIN_SOURCE_DIR } /cmake/unix /makedistsrc.sh "${ROOT_FULL_VERSION} " "${ROOT_MAIN_SOURCE_DIR } " )
579
583
add_custom_target (dist COMMAND cpack --config CPackConfig.cmake)
580
584
581
585
#---Configure and install various files neded later and for clients -----------------------------
582
586
include (RootConfiguration)
583
587
584
588
#---Installation of project-wise artifacts-------------------------------------------------------
585
- if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_INSTALL_PREFIX )
589
+ if (NOT ROOT_MAIN_SOURCE_DIR STREQUAL CMAKE_INSTALL_PREFIX )
586
590
install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR} )
587
591
if (gnuinstall)
588
592
install (DIRECTORY README/ DESTINATION ${CMAKE_INSTALL_DOCDIR} )
@@ -626,16 +630,16 @@ endif()
626
630
set (root_jupyter_dir notebook)
627
631
set (root_jupyter_config jupyter_notebook_config.py)
628
632
configure_file (etc/${root_jupyter_dir} /${root_jupyter_config} .in etc/${root_jupyter_dir} /${root_jupyter_config} )
629
- install (FILES ${CMAKE_BINARY_DIR } /etc/${root_jupyter_dir} /${root_jupyter_config} DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} /${root_jupyter_dir} )
633
+ install (FILES ${ROOT_MAIN_BINARY_DIR } /etc/${root_jupyter_dir} /${root_jupyter_config} DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} /${root_jupyter_dir} )
630
634
631
635
set (root_kernel_dir ${root_jupyter_dir} /kernels/root)
632
636
set (root_kernel_file kernel.json)
633
637
configure_file (etc/${root_kernel_dir} /${root_kernel_file} .in etc/${root_kernel_dir} /${root_kernel_file} )
634
- install (FILES ${CMAKE_BINARY_DIR } /etc/${root_kernel_dir} /${root_kernel_file} DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} /${root_kernel_dir} )
638
+ install (FILES ${ROOT_MAIN_BINARY_DIR } /etc/${root_kernel_dir} /${root_kernel_file} DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} /${root_kernel_dir} )
635
639
636
640
#---install clad header files-------------------------------------------------------------------
637
641
if (clad)
638
- install (DIRECTORY ${CMAKE_BINARY_DIR } /etc/cling/plugins/
642
+ install (DIRECTORY ${ROOT_MAIN_BINARY_DIR } /etc/cling/plugins/
639
643
DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} /cling/plugins)
640
644
endif ()
641
645
@@ -645,7 +649,7 @@ if(pyroot)
645
649
endif ()
646
650
647
651
#---Configure Testing using CTest----------------------------------------------------------------
648
- configure_file (${CMAKE_SOURCE_DIR } /cmake/modules/CTestCustom.cmake ${CMAKE_BINARY_DIR } COPYONLY )
652
+ configure_file (${ROOT_MAIN_SOURCE_DIR } /cmake/modules/CTestCustom.cmake ${ROOT_MAIN_BINARY_DIR } COPYONLY )
649
653
if (testing)
650
654
include (RootCTest)
651
655
set (upstreamprefix https://github.com/root-project)
0 commit comments