@@ -5,17 +5,9 @@ project(NinjaPythonDistributions)
5
5
set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH} )
6
6
7
7
# Options
8
- set (_build_from_source_default ON )
9
- if ((WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8) OR APPLE )
10
- set (_build_from_source_default OFF )
11
- endif ()
12
- option (BUILD_FROM_SOURCE "Build Ninja from source" ${_build_from_source_default} )
13
8
option (BUILD_VERBOSE "Display additional information while building (e.g download progress, ...)" OFF )
14
9
set (ARCHIVE_DOWNLOAD_DIR "${CMAKE_BINARY_DIR} " CACHE PATH "Directory where to download archives" )
15
10
16
- # Dependencies
17
- find_package (PythonInterp REQUIRED)
18
-
19
11
include (NinjaUrls)
20
12
21
13
#-----------------------------------------------------------------------------
@@ -36,39 +28,19 @@ if(WIN32)
36
28
endif ()
37
29
check_archive_var("${src_archive} " )
38
30
39
- set (binary_archive "linux32_binary" )
40
- if (CMAKE_SIZEOF_VOID_P EQUAL 8)
41
- set (binary_archive "linux64_binary" )
42
- endif ()
43
- if (APPLE )
44
- set (binary_archive "macosx_binary" )
45
- endif ()
46
- if (WIN32 )
47
- set (binary_archive "win32_binary" )
48
- if (CMAKE_SIZEOF_VOID_P EQUAL 8)
49
- set (binary_archive "win64_binary" )
50
- endif ()
51
- endif ()
52
- check_archive_var("${binary_archive} " )
53
-
54
31
#-----------------------------------------------------------------------------
55
32
# Summary
56
33
#-----------------------------------------------------------------------------
57
34
message (STATUS "*********************************************" )
58
35
message (STATUS "Ninja Python Distribution" )
59
36
message (STATUS "" )
60
- message (STATUS " BUILD_FROM_SOURCE : ${BUILD_FROM_SOURCE} " )
61
37
message (STATUS " BUILD_VERBOSE : ${BUILD_VERBOSE} " )
62
38
message (STATUS "" )
63
39
message (STATUS " ARCHIVE_DOWNLOAD_DIR : ${ARCHIVE_DOWNLOAD_DIR} " )
64
40
message (STATUS "" )
65
41
message (STATUS " src_archive : ${src_archive} " )
66
42
message (STATUS " <src_archive>_url : ${${src_archive} _url}" )
67
43
message (STATUS " <src_archive>_sha256 : ${${src_archive} _sha256}" )
68
- message (STATUS "" )
69
- message (STATUS " binary_archive : ${binary_archive} " )
70
- message (STATUS " <binary_archive>_url : ${${binary_archive} _url}" )
71
- message (STATUS " <binary_archive>_sha256 : ${${binary_archive} _sha256}" )
72
44
message (STATUS "*********************************************" )
73
45
74
46
#-----------------------------------------------------------------------------
@@ -105,18 +77,21 @@ elseif(NOT EXISTS ${Ninja_SOURCE_DIR})
105
77
message (FATAL_ERROR "Ninja_SOURCE_DIR is set to a nonexistent directory" )
106
78
endif ()
107
79
108
- if (BUILD_FROM_SOURCE)
80
+ #-----------------------------------------------------------------------------
81
+ # Build from source
82
+ #-----------------------------------------------------------------------------
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+)
109
87
110
- #-----------------------------------------------------------------------------
111
- # Build from source
112
- #-----------------------------------------------------------------------------
113
- set (ninja_executable ${Ninja_SOURCE_DIR} /ninja${CMAKE_EXECUTABLE_SUFFIX} )
88
+ # Dependencies
89
+ find_package (PythonInterp REQUIRED)
114
90
91
+ set (ninja_executable ${Ninja_SOURCE_DIR} /ninja${CMAKE_EXECUTABLE_SUFFIX} )
115
92
set (bootstrap_command ${PYTHON_EXECUTABLE} configure.py --bootstrap)
116
93
# Explicitly defining _BSD_SOURCE is required to support building the wheel on Alpine. See issue #22
117
- if (UNIX AND NOT APPLE )
118
- set (bootstrap_command ${CMAKE_COMMAND} -E env CXXFLAGS=-D_BSD_SOURCE ${bootstrap_command} )
119
- endif ()
94
+ set (bootstrap_command ${CMAKE_COMMAND} -E env CXXFLAGS=-D_BSD_SOURCE ${bootstrap_command} )
120
95
add_custom_command (
121
96
COMMAND ${bootstrap_command}
122
97
OUTPUT ${ninja_executable}
@@ -125,41 +100,31 @@ if(BUILD_FROM_SOURCE)
125
100
add_custom_target (build_ninja ALL
126
101
DEPENDS download_ninja_source ${ninja_executable}
127
102
)
128
-
129
- find_program (STRIP_EXECUTABLE strip)
130
- if (STRIP_EXECUTABLE)
131
- add_custom_target (strip_ninja_executable ALL
132
- COMMAND ${STRIP_EXECUTABLE} ${ninja_executable}
133
- WORKING_DIRECTORY ${Ninja_SOURCE_DIR}
134
- COMMENT "Stripping ninja executable"
135
- )
136
- add_dependencies (strip_ninja_executable build_ninja)
137
- endif ()
138
-
139
103
else ()
140
-
141
- #-----------------------------------------------------------------------------
142
- # Download pre-built archive
143
- #-----------------------------------------------------------------------------
144
- if (${binary_archive} _sha256 STREQUAL "NA" )
145
- message (FATAL_ERROR "Pre-built archives not available for '${binary_archive} '. Consider setting BUILD_FROM_SOURCE to ON." )
146
- endif ()
147
- # Download selected binary archive
148
- ExternalProject_add(download_ninja_binary
149
- SOURCE_DIR ${CMAKE_BINARY_DIR} /bin
150
- URL ${${binary_archive} _url}
151
- URL_HASH SHA256=${${binary_archive} _sha256}
152
- DOWNLOAD_DIR ${ARCHIVE_DOWNLOAD_DIR}
153
- USES_TERMINAL_DOWNLOAD 1
154
- CONFIGURE_COMMAND ""
155
- BUILD_COMMAND ""
156
- BUILD_IN_SOURCE 1
104
+ set (Ninja_BINARY_DIR ${CMAKE_BINARY_DIR} /Ninja-build )
105
+ ExternalProject_add(build_ninja
106
+ SOURCE_DIR ${Ninja_SOURCE_DIR}
107
+ BINARY_DIR ${Ninja_BINARY_DIR}
108
+ DOWNLOAD_COMMAND ""
109
+ UPDATE_COMMAND ""
110
+ BUILD_ALWAYS 1
111
+ USES_TERMINAL_CONFIGURE 1
112
+ USES_TERMINAL_BUILD 1
157
113
INSTALL_COMMAND ""
158
- ${ep_download_no_progress_args}
114
+ DEPENDS
115
+ download_ninja_source
159
116
)
160
- message ( STATUS "download_ninja_binary - URL: ${ ${binary_archive} _url}" )
161
- set (ninja_executable ${CMAKE_BINARY_DIR} /bin/ninja ${CMAKE_EXECUTABLE_SUFFIX} )
117
+ set (ninja_executable ${Ninja_BINARY_DIR} /ninja ${CMAKE_EXECUTABLE_SUFFIX} )
118
+ endif ( )
162
119
120
+ find_program (STRIP_EXECUTABLE strip)
121
+ if (STRIP_EXECUTABLE)
122
+ add_custom_target (strip_ninja_executable ALL
123
+ COMMAND ${STRIP_EXECUTABLE} ${ninja_executable}
124
+ WORKING_DIRECTORY ${Ninja_SOURCE_DIR}
125
+ COMMENT "Stripping ninja executable"
126
+ )
127
+ add_dependencies (strip_ninja_executable build_ninja)
163
128
endif ()
164
129
165
130
install (FILES ${Ninja_SOURCE_DIR} /misc/ninja_syntax.py DESTINATION src/ninja)
0 commit comments