Skip to content

Commit 89fccb3

Browse files
committed
refactor: always build from sources
1 parent b19504f commit 89fccb3

File tree

6 files changed

+117
-197
lines changed

6 files changed

+117
-197
lines changed

CMakeLists.txt

Lines changed: 32 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,9 @@ project(NinjaPythonDistributions)
55
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH})
66

77
# 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})
138
option(BUILD_VERBOSE "Display additional information while building (e.g download progress, ...)" OFF)
149
set(ARCHIVE_DOWNLOAD_DIR "${CMAKE_BINARY_DIR}" CACHE PATH "Directory where to download archives")
1510

16-
# Dependencies
17-
find_package(PythonInterp REQUIRED)
18-
1911
include(NinjaUrls)
2012

2113
#-----------------------------------------------------------------------------
@@ -36,39 +28,19 @@ if(WIN32)
3628
endif()
3729
check_archive_var("${src_archive}")
3830

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-
5431
#-----------------------------------------------------------------------------
5532
# Summary
5633
#-----------------------------------------------------------------------------
5734
message(STATUS "*********************************************")
5835
message(STATUS "Ninja Python Distribution")
5936
message(STATUS "")
60-
message(STATUS " BUILD_FROM_SOURCE : ${BUILD_FROM_SOURCE}")
6137
message(STATUS " BUILD_VERBOSE : ${BUILD_VERBOSE}")
6238
message(STATUS "")
6339
message(STATUS " ARCHIVE_DOWNLOAD_DIR : ${ARCHIVE_DOWNLOAD_DIR}")
6440
message(STATUS "")
6541
message(STATUS " src_archive : ${src_archive}")
6642
message(STATUS " <src_archive>_url : ${${src_archive}_url}")
6743
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}")
7244
message(STATUS "*********************************************")
7345

7446
#-----------------------------------------------------------------------------
@@ -105,18 +77,21 @@ elseif(NOT EXISTS ${Ninja_SOURCE_DIR})
10577
message(FATAL_ERROR "Ninja_SOURCE_DIR is set to a nonexistent directory")
10678
endif()
10779

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+)
10987

110-
#-----------------------------------------------------------------------------
111-
# Build from source
112-
#-----------------------------------------------------------------------------
113-
set(ninja_executable ${Ninja_SOURCE_DIR}/ninja${CMAKE_EXECUTABLE_SUFFIX})
88+
# Dependencies
89+
find_package(PythonInterp REQUIRED)
11490

91+
set(ninja_executable ${Ninja_SOURCE_DIR}/ninja${CMAKE_EXECUTABLE_SUFFIX})
11592
set(bootstrap_command ${PYTHON_EXECUTABLE} configure.py --bootstrap)
11693
# 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})
12095
add_custom_command(
12196
COMMAND ${bootstrap_command}
12297
OUTPUT ${ninja_executable}
@@ -125,41 +100,31 @@ if(BUILD_FROM_SOURCE)
125100
add_custom_target(build_ninja ALL
126101
DEPENDS download_ninja_source ${ninja_executable}
127102
)
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-
139103
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
157113
INSTALL_COMMAND ""
158-
${ep_download_no_progress_args}
114+
DEPENDS
115+
download_ninja_source
159116
)
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()
162119

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)
163128
endif()
164129

165130
install(FILES ${Ninja_SOURCE_DIR}/misc/ninja_syntax.py DESTINATION src/ninja)

NinjaUrls.cmake

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,8 @@
11

22
#-----------------------------------------------------------------------------
33
# Ninja sources
4-
set(unix_source_url "https://github.com/kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.tar.gz")
4+
set(unix_source_url "https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.tar.gz")
55
set(unix_source_sha256 "d00033813993116a4e14f835df813daee9916b107333d88dbb798a22f8671b1f")
66

7-
set(windows_source_url "https://github.com/kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.zip")
7+
set(windows_source_url "https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.zip")
88
set(windows_source_sha256 "8399607087a165436e6bb35beed7c235180ba4a9af608f8c19bc5812ced06a81")
9-
10-
#-----------------------------------------------------------------------------
11-
# Ninja binaries
12-
set(linux32_binary_url "NA") # Linux 32-bit binaries not available
13-
set(linux32_binary_sha256 "NA")
14-
15-
set(linux64_binary_url "https://github.com/Kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1_x86_64-linux-gnu.tar.gz")
16-
set(linux64_binary_sha256 "5bb10ae9df47489b0e77732ed9fd95acccdd211d01fb6b26130fd408515b8995")
17-
18-
set(macosx_binary_url "https://github.com/Kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1_x86_64-apple-darwin.tar.gz")
19-
set(macosx_binary_sha256 "4acd065772228a5dd4cf85428b304cc157f07c333e4ea9931978eaef59f5e313")
20-
21-
set(win32_binary_url "NA") # Windows 32-bit binaries not available
22-
set(win32_binary_sha256 "NA")
23-
24-
set(win64_binary_url "https://github.com/Kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1_i686-pc-windows-msvc.zip")
25-
set(win64_binary_sha256 "7f54cd8d72306b14bcb3518e21bc0c5f9d8ec31dea7ccd340cbfade070e30019")

docs/update_ninja_version.rst

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Updating the Ninja version
77
A developer should use the following steps to update the version ``X.Y.Z``
88
of Ninja associated with the current Ninja python distributions.
99

10-
Available Ninja archives can be found `here <https://github.com/kitware/ninja/releases>`_.
10+
Available Ninja archives can be found `here <https://github.com/Kitware/ninja/releases>`_.
1111

1212
Nox prodedure
1313
-------------
@@ -32,18 +32,12 @@ Classic procedure:
3232
$ release=1.10.0.gfb670.kitware.jobserver-1
3333
$ python scripts/update_ninja_version.py ${release}
3434

35-
Collecting URLs and SHA256s from 'https://github.com/kitware/ninja/releases'
36-
Downloading https://github.com/kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.tar.gz
37-
Downloading https://github.com/kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.tar.gz - done
38-
Downloading https://github.com/kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.zip
39-
Downloading https://github.com/kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.zip - done
40-
Downloading https://github.com/kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1
41-
Downloading https://github.com/kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1 - done
42-
Downloading https://github.com/kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1
43-
Downloading https://github.com/kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1 - done
44-
Downloading https://github.com/kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1
45-
Downloading https://github.com/kitware/ninja/releases/download/v1.10.0.gfb670.kitware.jobserver-1/ninja-1.10.0.gfb670.kitware.jobserver-1 - done
46-
Collecting URLs and SHA256s from 'https://github.com/kitware/ninja/releases' - done
35+
Collecting URLs and SHA256s from 'https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1'
36+
Downloading https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.tar.gz
37+
Downloading https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.tar.gz - done
38+
Downloading https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.zip
39+
Downloading https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1.zip - done
40+
Collecting URLs and SHA256s from 'https://github.com/Kitware/ninja/archive/v1.10.0.gfb670.kitware.jobserver-1' - done
4741
Updating 'NinjaUrls.cmake' with CMake version 1.10.0.gfb670.kitware.jobserver-1
4842
Updating 'NinjaUrls.cmake' with CMake version 1.10.0.gfb670.kitware.jobserver-1 - done
4943
Updating README.rst

noxfile.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ def bump(session: nox.Session) -> None:
6161
Set to a new version, use -- <version>, otherwise will use the latest version.
6262
"""
6363
parser = argparse.ArgumentParser(description="Process some integers.")
64+
parser.add_argument(
65+
"--upstream-repository",
66+
metavar="UPSTREAM_REPOSITORY",
67+
choices=["Kitware/ninja", "ninja-build/ninja"],
68+
default="Kitware/ninja",
69+
help="Ninja upstream repository",
70+
)
6471
parser.add_argument(
6572
"--commit", action="store_true", help="Make a branch and commit."
6673
)
@@ -72,17 +79,17 @@ def bump(session: nox.Session) -> None:
7279
if args.version is None:
7380
session.install("lastversion")
7481
version = session.run(
75-
"lastversion", "--format", "tag", "kitware/ninja", log=False, silent=True
82+
"lastversion", "--format", "tag", args.upstream_repository, log=False, silent=True
7683
).strip()
7784
if version.startswith("v"):
7885
version = version[1:]
7986
else:
8087
version = args.version
8188

82-
session.install("githubrelease")
89+
session.install("requests")
8390

8491
extra = ["--quiet"] if args.commit else []
85-
session.run("python", "scripts/update_ninja_version.py", version, *extra)
92+
session.run("python", "scripts/update_ninja_version.py", "--upstream-repository", args.upstream_repository, version, *extra)
8693

8794
if args.commit:
8895
session.run("git", "switch", "-c", f"update-to-ninja-{version}", external=True)

0 commit comments

Comments
 (0)