|
1 | | -cmake_minimum_required(VERSION 3.6) |
| 1 | +cmake_minimum_required(VERSION 3.15) |
2 | 2 |
|
3 | 3 | project(NinjaPythonDistributions) |
4 | 4 |
|
5 | 5 | set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH}) |
6 | 6 |
|
7 | 7 | # Options |
8 | 8 | option(BUILD_VERBOSE "Display additional information while building (e.g download progress, ...)" OFF) |
| 9 | +option(RUN_NINJA_TEST "Run Ninja test suite" ON) |
9 | 10 | set(ARCHIVE_DOWNLOAD_DIR "${CMAKE_BINARY_DIR}" CACHE PATH "Directory where to download archives") |
10 | 11 |
|
11 | 12 | include(NinjaUrls) |
@@ -35,6 +36,7 @@ message(STATUS "*********************************************") |
35 | 36 | message(STATUS "Ninja Python Distribution") |
36 | 37 | message(STATUS "") |
37 | 38 | message(STATUS " BUILD_VERBOSE : ${BUILD_VERBOSE}") |
| 39 | +message(STATUS " RUN_NINJA_TEST : ${RUN_NINJA_TEST}") |
38 | 40 | message(STATUS "") |
39 | 41 | message(STATUS " ARCHIVE_DOWNLOAD_DIR : ${ARCHIVE_DOWNLOAD_DIR}") |
40 | 42 | message(STATUS "") |
@@ -80,75 +82,64 @@ endif() |
80 | 82 | #----------------------------------------------------------------------------- |
81 | 83 | # Build from source |
82 | 84 | #----------------------------------------------------------------------------- |
83 | | -if(UNIX AND NOT APPLE) |
84 | | - # We're more likely to build from sources from PyPI on UNIX |
85 | | - # In order to relax the constraint on CMake version, |
86 | | - # use the python bootstrap script rather than the CMake build (requires 3.15+) |
87 | | - |
88 | | - # Dependencies |
89 | | - find_package(PythonInterp REQUIRED) |
90 | | - |
91 | | - #configure.py is deprecated by ninja-build project. |
92 | | - set(ninja_executable ${Ninja_SOURCE_DIR}/cmake-build/ninja${CMAKE_EXECUTABLE_SUFFIX}) |
93 | | - set(local_cmake_command ${CMAKE_COMMAND} -Bcmake-build -H. && ${CMAKE_COMMAND} --build cmake-build) |
94 | | - add_custom_command( |
95 | | - COMMAND ${local_cmake_command} |
96 | | - OUTPUT ${ninja_executable} |
97 | | - WORKING_DIRECTORY ${Ninja_SOURCE_DIR} |
98 | | - ) |
99 | | - add_custom_target(build_ninja ALL |
100 | | - DEPENDS download_ninja_source ${ninja_executable} |
101 | | - ) |
102 | | -else() |
103 | | - set(Ninja_BINARY_DIR ${CMAKE_BINARY_DIR}/Ninja-build) |
104 | | - # cache arguments |
105 | | - set(_cache_args ) |
106 | | - foreach(var_name IN ITEMS |
107 | | - CMAKE_BUILD_TYPE |
108 | | - CMAKE_TOOLCHAIN_FILE |
109 | | - CMAKE_BUILD_PARALLEL_LEVEL |
110 | | - CMAKE_JOB_POOLS |
111 | | - CMAKE_JOB_POOL_COMPILE |
112 | | - CMAKE_JOB_POOL_LINK |
113 | | - CMAKE_OSX_DEPLOYMENT_TARGET |
114 | | - CMAKE_OSX_ARCHITECTURES |
115 | | - CMAKE_OSX_SYSROOT |
116 | | - ) |
117 | | - if(DEFINED ${var_name}) |
118 | | - list(APPEND _cache_args |
119 | | - -D${var_name}:STRING=${${var_name}} |
120 | | - ) |
121 | | - message(STATUS "SuperBuild - ${var_name}: ${${var_name}}") |
122 | | - endif() |
123 | | - endforeach() |
124 | | - # _cache_args should not be empty |
125 | | - list(APPEND _cache_args |
126 | | - -DNINJA_SUPERBUILD:BOOL=true |
127 | | - ) |
128 | | - ExternalProject_add(build_ninja |
129 | | - SOURCE_DIR ${Ninja_SOURCE_DIR} |
130 | | - BINARY_DIR ${Ninja_BINARY_DIR} |
131 | | - DOWNLOAD_COMMAND "" |
132 | | - UPDATE_COMMAND "" |
133 | | - BUILD_ALWAYS 1 |
134 | | - USES_TERMINAL_CONFIGURE 1 |
135 | | - USES_TERMINAL_BUILD 1 |
136 | | - INSTALL_COMMAND "" |
137 | | - CMAKE_CACHE_ARGS ${_cache_args} |
138 | | - DEPENDS |
139 | | - download_ninja_source |
140 | | - ) |
141 | | - set(ninja_executable ${Ninja_BINARY_DIR}/ninja${CMAKE_EXECUTABLE_SUFFIX}) |
142 | | -endif() |
| 85 | +set(Ninja_BINARY_DIR ${CMAKE_BINARY_DIR}/Ninja-build) |
| 86 | +# cache arguments |
| 87 | +set(_cache_args ) |
| 88 | +foreach(var_name IN ITEMS |
| 89 | + CMAKE_BUILD_TYPE |
| 90 | + CMAKE_TOOLCHAIN_FILE |
| 91 | + CMAKE_BUILD_PARALLEL_LEVEL |
| 92 | + CMAKE_JOB_POOLS |
| 93 | + CMAKE_JOB_POOL_COMPILE |
| 94 | + CMAKE_JOB_POOL_LINK |
| 95 | + CMAKE_OSX_DEPLOYMENT_TARGET |
| 96 | + CMAKE_OSX_ARCHITECTURES |
| 97 | + CMAKE_OSX_SYSROOT |
| 98 | + ) |
| 99 | + if(DEFINED ${var_name}) |
| 100 | + list(APPEND _cache_args -D${var_name}:STRING=${${var_name}}) |
| 101 | + message(STATUS "SuperBuild - ${var_name}: ${${var_name}}") |
| 102 | + endif() |
| 103 | +endforeach() |
| 104 | + |
| 105 | +# _cache_args should not be empty |
| 106 | +list(APPEND _cache_args -DNINJA_SUPERBUILD:BOOL=true) |
| 107 | +ExternalProject_add(build_ninja |
| 108 | + SOURCE_DIR ${Ninja_SOURCE_DIR} |
| 109 | + BINARY_DIR ${Ninja_BINARY_DIR} |
| 110 | + DOWNLOAD_COMMAND "" |
| 111 | + UPDATE_COMMAND "" |
| 112 | + BUILD_ALWAYS 1 |
| 113 | + USES_TERMINAL_CONFIGURE 1 |
| 114 | + USES_TERMINAL_BUILD 1 |
| 115 | + INSTALL_COMMAND "" |
| 116 | + CMAKE_CACHE_ARGS ${_cache_args} |
| 117 | + DEPENDS |
| 118 | + download_ninja_source |
| 119 | + ) |
| 120 | +set(ninja_executable ${Ninja_BINARY_DIR}/ninja${CMAKE_EXECUTABLE_SUFFIX}) |
| 121 | +set(NINJA_BUILD_LAST_STEP "build") |
143 | 122 |
|
144 | 123 | find_program(STRIP_EXECUTABLE strip) |
145 | 124 | if(STRIP_EXECUTABLE) |
146 | | - add_custom_target(strip_ninja_executable ALL |
| 125 | + ExternalProject_Add_Step(build_ninja strip_executables |
| 126 | + DEPENDEES ${NINJA_BUILD_LAST_STEP} |
| 127 | + COMMENT "Stripping CMake executables" |
147 | 128 | COMMAND ${STRIP_EXECUTABLE} ${ninja_executable} |
148 | | - WORKING_DIRECTORY ${Ninja_SOURCE_DIR} |
149 | | - COMMENT "Stripping ninja executable" |
| 129 | + USES_TERMINAL 1 |
| 130 | + ) |
| 131 | + set(NINJA_BUILD_LAST_STEP "strip_executables") |
| 132 | +endif() |
| 133 | + |
| 134 | +if(RUN_NINJA_TEST) |
| 135 | + ExternalProject_Add_Step(build_ninja run_ninja_test_suite |
| 136 | + DEPENDEES ${NINJA_BUILD_LAST_STEP} |
| 137 | + COMMENT "Running Ninja test suite" |
| 138 | + COMMAND ${Ninja_BINARY_DIR}/ninja_test${CMAKE_EXECUTABLE_SUFFIX} |
| 139 | + WORKING_DIRECTORY ${Ninja_BINARY_DIR} |
| 140 | + USES_TERMINAL 1 |
150 | 141 | ) |
151 | | - add_dependencies(strip_ninja_executable build_ninja) |
| 142 | + set(NINJA_BUILD_LAST_STEP "run_ninja_test_suite") |
152 | 143 | endif() |
153 | 144 |
|
154 | 145 | install(FILES ${Ninja_SOURCE_DIR}/misc/ninja_syntax.py DESTINATION src/ninja) |
|
0 commit comments