1option(CLANG_INSTALL_SCANBUILD "Install the scan-build tool" ON)
2
3include(GNUInstallDirs)
4
5if (WIN32 AND NOT CYGWIN)
6  set(BinFiles
7        scan-build
8        scan-build.bat)
9  set(LibexecFiles
10        ccc-analyzer
11        c++-analyzer
12        ccc-analyzer.bat
13        c++-analyzer.bat)
14else()
15  set(BinFiles
16        scan-build)
17  set(LibexecFiles
18        ccc-analyzer
19        c++-analyzer)
20  if (APPLE)
21    list(APPEND BinFiles
22           set-xcode-analyzer)
23  endif()
24endif()
25
26set(ManPages
27      scan-build.1)
28
29set(ShareFiles
30      scanview.css
31      sorttable.js)
32
33
34if(CLANG_INSTALL_SCANBUILD)
35  foreach(BinFile ${BinFiles})
36    add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/${BinFile}
37                       COMMAND ${CMAKE_COMMAND} -E make_directory
38                         ${CMAKE_BINARY_DIR}/bin
39                       COMMAND ${CMAKE_COMMAND} -E copy
40                         ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}
41                         ${CMAKE_BINARY_DIR}/bin/
42                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile})
43    list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile})
44    install(PROGRAMS bin/${BinFile}
45            DESTINATION bin
46            COMPONENT scan-build)
47  endforeach()
48
49  foreach(LibexecFile ${LibexecFiles})
50    add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/libexec/${LibexecFile}
51                       COMMAND ${CMAKE_COMMAND} -E make_directory
52                         ${CMAKE_BINARY_DIR}/libexec
53                       COMMAND ${CMAKE_COMMAND} -E copy
54                         ${CMAKE_CURRENT_SOURCE_DIR}/libexec/${LibexecFile}
55                         ${CMAKE_BINARY_DIR}/libexec/
56                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libexec/${LibexecFile})
57    list(APPEND Depends ${CMAKE_BINARY_DIR}/libexec/${LibexecFile})
58    install(PROGRAMS libexec/${LibexecFile}
59            DESTINATION libexec
60            COMPONENT scan-build)
61  endforeach()
62
63  foreach(ManPage ${ManPages})
64    add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MANDIR}/man1/${ManPage}
65                       COMMAND ${CMAKE_COMMAND} -E make_directory
66                         ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MANDIR}/man1
67                       COMMAND ${CMAKE_COMMAND} -E copy
68                         ${CMAKE_CURRENT_SOURCE_DIR}/man/${ManPage}
69                         ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MANDIR}/man1/
70                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/man/${ManPage})
71    list(APPEND Depends ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MANDIR}/man1/${ManPage})
72    install(PROGRAMS man/${ManPage}
73            DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
74            COMPONENT scan-build)
75  endforeach()
76
77  foreach(ShareFile ${ShareFiles})
78    add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/share/scan-build/${ShareFile}
79                       COMMAND ${CMAKE_COMMAND} -E make_directory
80                         ${CMAKE_BINARY_DIR}/share/scan-build
81                       COMMAND ${CMAKE_COMMAND} -E copy
82                         ${CMAKE_CURRENT_SOURCE_DIR}/share/scan-build/${ShareFile}
83                         ${CMAKE_BINARY_DIR}/share/scan-build/
84                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/share/scan-build/${ShareFile})
85    list(APPEND Depends ${CMAKE_BINARY_DIR}/share/scan-build/${ShareFile})
86    install(FILES share/scan-build/${ShareFile}
87            DESTINATION share/scan-build
88            COMPONENT scan-build)
89  endforeach()
90
91  add_custom_target(scan-build ALL DEPENDS ${Depends})
92  set_target_properties(scan-build PROPERTIES FOLDER "Misc")
93
94  if(NOT LLVM_ENABLE_IDE)
95    add_llvm_install_targets("install-scan-build"
96                             DEPENDS scan-build
97                             COMPONENT scan-build)
98  endif()
99endif()
100