Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Apr 2021 06:59:35 GMT
From:      Tobias Kortkamp <tobik@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: a91d65363fe8 - main - Mk/Uses/ninja.mk: Add support for devel/samurai (D29353)
Message-ID:  <202104200659.13K6xZnl026714@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by tobik:

URL: https://cgit.FreeBSD.org/ports/commit/?id=a91d65363fe8aa72bdf427bb639b0fe258ee7c01

commit a91d65363fe8aa72bdf427bb639b0fe258ee7c01
Author:     Tobias Kortkamp <tobik@FreeBSD.org>
AuthorDate: 2021-04-06 07:23:13 +0000
Commit:     Tobias Kortkamp <tobik@FreeBSD.org>
CommitDate: 2021-04-20 06:57:34 +0000

    Mk/Uses/ninja.mk: Add support for devel/samurai (D29353)
    
    Samurai is a Ninja-compatible build tool with fewer dependencies
    than Ninja.  Hook it to the framework via a new NINJA_DEFAULT.
    
    This also adds %p to NINJA_STATUS to make Ninja or Samurai print
    the percentage of completed jobs to make it easier to eyeball how
    much of the build is done.
    
    PR:             254678
    Exp-run by:     antoine
---
 Mk/Uses/ninja.mk              | 61 +++++++++++++++++++++++++++++++++++++++----
 Mk/bsd.default-versions.mk    |  4 ++-
 devel/jiri/Makefile           |  5 ++--
 devel/meson/Makefile          |  3 +--
 devel/tinygo/Makefile         |  5 ++--
 graphics/py-h3/Makefile       |  3 +--
 japanese/mozc-server/Makefile |  7 +++--
 lang/mono6.8/Makefile         |  2 +-
 lang/rust-bootstrap/Makefile  |  3 +--
 lang/rust/Makefile            |  5 ++--
 math/py-pdal/Makefile         |  5 ++--
 math/sage/Makefile            |  8 +++---
 multimedia/handbrake/Makefile |  4 +--
 sysutils/fluxengine/Makefile  |  4 +--
 www/deno/Makefile             |  4 +--
 www/qt5-webengine/Makefile    |  3 +--
 16 files changed, 84 insertions(+), 42 deletions(-)

diff --git a/Mk/Uses/ninja.mk b/Mk/Uses/ninja.mk
index e67d6e488841..6f71484f1ec4 100644
--- a/Mk/Uses/ninja.mk
+++ b/Mk/Uses/ninja.mk
@@ -2,26 +2,77 @@
 #
 # Feature:		ninja
 # Usage:		USES=ninja
+# Valid ARGS:		build, make (default), run
+#
+# build			add a build dependency on ninja
+# make			use ninja for the build instead of make, implies "build"
+# run			add a run dependency on ninja
 #
 # MAINTAINER: portmgr@FreeBSD.org
 
 .if !defined(_INCLUDE_USES_NINJA_MK)
 _INCLUDE_USES_NINJA_MK=	yes
 
-.if !empty(ninja_ARGS)
-IGNORE=	Incorrect 'USES+= ninja:${ninja_ARGS}' ninja takes no arguments
+_valid_ARGS=	build make run
+
+.for _arg in ${ninja_ARGS}
+.    if empty(_valid_ARGS:M${_arg})
+IGNORE=	'USES+= ninja:${ninja_ARGS}' usage: argument [${_arg}] is not recognized
+.    endif
+.endfor
+
+.if empty(ninja_ARGS)
+ninja_ARGS+=	make
 .endif
 
-MAKE_ARGS+=	-v
+.if ${ninja_ARGS:Mmake}
+ninja_ARGS+=	build
+.endif
+
+.if ${NINJA_DEFAULT} == ninja
+NINJA_CMD=	ninja
+_NINJA_PORT=	devel/ninja
+.elif ${NINJA_DEFAULT} == samurai
+NINJA_CMD=	samu
+_NINJA_PORT=	devel/samurai
+MAKE_ENV+=	SAMUFLAGS="-v -j${MAKE_JOBS_NUMBER}"
+.  if ${ninja_ARGS:Mbuild} && !${BINARY_ALIAS:U:Mninja=*}
+# Cmake and Meson have native support for Samurai and detect and
+# use it when Ninja is not available in the build environment.  The
+# alias is needed for other ports which call Ninja directly and do
+# not fall back to Samurai. There should be no harm in providing it
+# generally.
+BINARY_ALIAS+=	ninja=samu
+.  endif
+.else
+IGNORE=	invalid DEFAULT_VERSIONS+=ninja=${NINJA_DEFAULT}
+.endif
 
-BUILD_DEPENDS+=	ninja:devel/ninja
+.if ${ninja_ARGS:Mbuild}
+BUILD_DEPENDS+=	${NINJA_CMD}:${_NINJA_PORT}
+# Humanize build log and include percentage of completed jobs %p in it.
+# See samu(1) or the Ninja manual.
+MAKE_ENV+=	NINJA_STATUS="[%p %s/%t] "
+.endif
 
+.if ${ninja_ARGS:Mmake}
+.  if ${NINJA_DEFAULT} == ninja
+# samu does not support GNU-style args, so we cannot just append
+# -v last.  samu gets this via SAMUFLAGS above but ninja does not
+# support an equivalent environment variable.
+MAKE_ARGS+=	-v
+.  endif
 CMAKE_ARGS+=	-GNinja
 MAKEFILE=
-MAKE_CMD=	ninja
+MAKE_CMD=	${NINJA_CMD}
 MAKE_FLAGS=
 # Set a minimal job of 1
 _MAKE_JOBS=	-j${MAKE_JOBS_NUMBER}
 _DESTDIR_VIA_ENV=	yes
+.endif
+
+.if ${ninja_ARGS:Mrun}
+RUN_DEPENDS+=	${NINJA_CMD}:${_NINJA_PORT}
+.endif
 
 .endif
diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk
index 1d0176f8a267..9e41c44e3ef5 100644
--- a/Mk/bsd.default-versions.mk
+++ b/Mk/bsd.default-versions.mk
@@ -18,7 +18,7 @@ _INCLUDE_BSD_DEFAULT_VERSIONS_MK=	yes
 LOCALBASE?=	/usr/local
 
 .for lang in APACHE BDB COROSYNC EMACS FIREBIRD FORTRAN FPC GCC GHOSTSCRIPT \
-	IMAGEMAGICK JAVA LAZARUS LIBRSVG2 LINUX LLVM LUA MYSQL PERL5 \
+	IMAGEMAGICK JAVA LAZARUS LIBRSVG2 LINUX LLVM LUA MYSQL NINJA PERL5 \
 	PGSQL PHP PYTHON PYTHON2 PYTHON3 RUBY RUST SAMBA SSL TCLTK VARNISH
 .if defined(${lang}_DEFAULT)
 ERROR+=	"The variable ${lang}_DEFAULT is set and it should only be defined through DEFAULT_VERSIONS+=${lang:tl}=${${lang}_DEFAULT} in /etc/make.conf"
@@ -81,6 +81,8 @@ LUA_DEFAULT?=		5.2
 MONO_DEFAULT=		5.10
 # Possible values: 5.5, 5.6, 5.7, 8.0, 10.3m, 10.4m, 10.5m, 5.5p, 5.6p, 5.7p, 5.6w, 5.7w
 MYSQL_DEFAULT?=		5.7
+# Possible values: ninja, samurai
+NINJA_DEFAULT?=		ninja
 # Possible values: 5.28, 5.30, 5.32, devel
 .if !exists(${LOCALBASE}/bin/perl) || (!defined(_PORTS_ENV_CHECK) && \
     defined(PACKAGE_BUILDING))
diff --git a/devel/jiri/Makefile b/devel/jiri/Makefile
index f1fb3cc25a76..ba8c3900e931 100644
--- a/devel/jiri/Makefile
+++ b/devel/jiri/Makefile
@@ -11,11 +11,10 @@ COMMENT=	Tool for multi-repo development
 LICENSE=	BSD3CLAUSE
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-BUILD_DEPENDS=	cmake:devel/cmake \
-		ninja:devel/ninja
+BUILD_DEPENDS=	cmake:devel/cmake
 RUN_DEPENDS=	git:devel/git
 
-USES=		go:modules
+USES=		go:modules ninja:build
 
 GITHASH=	1eee1043d12d1baabae7f2466cc0b1646395e32c
 TIMESTAMP=	2020-08-28T00:00:00.000000
diff --git a/devel/meson/Makefile b/devel/meson/Makefile
index f80ece912514..8a25e36d64ba 100644
--- a/devel/meson/Makefile
+++ b/devel/meson/Makefile
@@ -11,10 +11,9 @@ COMMENT=	High performance build system
 LICENSE=	APACHE20
 LICENSE_FILE=	${WRKSRC}/COPYING
 
-RUN_DEPENDS=	ninja:devel/ninja
 TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pytest-xdist>0:devel/py-pytest-xdist@${PY_FLAVOR}
 
-USES=		python:3.6+ shebangfix
+USES=		ninja:run python:3.6+ shebangfix
 USE_PYTHON=	autoplist distutils noflavors
 SHEBANG_FILES=	mesonbuild/rewriter.py \
 		mesonbuild/scripts/cmake_run_ctgt.py
diff --git a/devel/tinygo/Makefile b/devel/tinygo/Makefile
index 6b70ccdfcc2e..ca619d83b780 100644
--- a/devel/tinygo/Makefile
+++ b/devel/tinygo/Makefile
@@ -9,11 +9,10 @@ COMMENT=	Go compiler for small places
 LICENSE=	BSD3CLAUSE
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-BUILD_DEPENDS=	cmake:devel/cmake \
-		ninja:devel/ninja
+BUILD_DEPENDS=	cmake:devel/cmake
 TEST_DEPENDS=	qemu-system-arm:emulators/qemu
 
-USES=		gmake go:modules,run python:build
+USES=		gmake go:modules,run ninja:build python:build
 
 USE_GITHUB=	yes
 GH_ACCOUNT=	tinygo-org
diff --git a/graphics/py-h3/Makefile b/graphics/py-h3/Makefile
index b859669b8d85..09a9dccd838f 100644
--- a/graphics/py-h3/Makefile
+++ b/graphics/py-h3/Makefile
@@ -14,13 +14,12 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BUILD_DEPENDS=	cmake:devel/cmake \
 		h3>=${PORTVERSION:R}:graphics/h3 \
-		ninja:devel/ninja \
 		${PYTHON_PKGNAMEPREFIX}scikit-build>=0:devel/py-scikit-build@${PY_FLAVOR}
 LIB_DEPENDS=	libh3.so:graphics/h3
 TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}numpy>=0,1:math/py-numpy@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}pytest>=0:devel/py-pytest@${PY_FLAVOR}
 
-USES=		localbase:ldflags python:3.6+
+USES=		localbase:ldflags ninja:build python:3.6+
 USE_PYTHON=	autoplist concurrent cython distutils
 
 CFLAGS+=	-I${LOCALBASE}/include/h3
diff --git a/japanese/mozc-server/Makefile b/japanese/mozc-server/Makefile
index 9f4c90dcbef7..1f575a8fcc9e 100644
--- a/japanese/mozc-server/Makefile
+++ b/japanese/mozc-server/Makefile
@@ -9,8 +9,7 @@ CATEGORIES=	japanese
 MAINTAINER=	hrs@FreeBSD.org
 COMMENT?=	Mozc Japanese Input Method, Server
 
-BUILD_DEPENDS=	ninja:devel/ninja \
-		${PYTHON_PKGNAMEPREFIX}gyp>=20200512:devel/py-gyp@${PY_FLAVOR}
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}gyp>=20200512:devel/py-gyp@${PY_FLAVOR}
 EXTRACT_DEPENDS=${PYTHON_CMD}:${PYTHON_PORTSDIR}
 LIB_DEPENDS=	libprotobuf.so:devel/protobuf \
 		libzinnia.so:japanese/zinnia
@@ -25,8 +24,8 @@ USE_GITHUB=	yes
 GH_ACCOUNT=	hrs-allbsd
 GH_TUPLE=	hiroyuki-komatsu:japanese-usage-dictionary:e5b3425:udic
 
-USES=		compiler:c++11-lang pkgconfig gmake \
-		tar:bzip2 python:3.5+,build shebangfix
+USES=		compiler:c++11-lang gmake ninja:build pkgconfig \
+		python:3.5+,build shebangfix tar:bzip2
 SHEBANG_FILES=	src/build_mozc.py
 BUILD_WRKSRC=	${WRKSRC}/src
 
diff --git a/lang/mono6.8/Makefile b/lang/mono6.8/Makefile
index e9d5e9da9746..07ec0a3d15a7 100644
--- a/lang/mono6.8/Makefile
+++ b/lang/mono6.8/Makefile
@@ -79,7 +79,7 @@ MONODEV_CONFIGURE_ON=	--enable-icall-symbol-map --enable-icall-export --with-cra
 
 NINJA_DESC=	Use ninja to build wherever possible
 NINJA_CONFIGURE_ON=	ninja
-NINJA_BUILD_DEPENDS=	ninja>0:devel/ninja
+NINJA_USES=	ninja:build
 
 NLS_DESC=	NLS Localization Support
 NLS_CONFIGURE_OFF=	--disable-nls
diff --git a/lang/rust-bootstrap/Makefile b/lang/rust-bootstrap/Makefile
index 883cc5e2144c..4fe3721243c1 100644
--- a/lang/rust-bootstrap/Makefile
+++ b/lang/rust-bootstrap/Makefile
@@ -29,7 +29,6 @@ ONLY_FOR_ARCHS_REASON=	untested on other archs
 
 BUILD_DEPENDS=	cmake:devel/cmake \
 		gmake:devel/gmake \
-		ninja:devel/ninja \
 		rust>=${PORTVERSION}:lang/rust
 
 FLAVORS=	aarch64 amd64 armv6 armv7 i386 powerpc64_elfv1 powerpc64_elfv2 powerpc64le
@@ -46,7 +45,7 @@ powerpc64_elfv1_BUILD_DEPENDS=	powerpc64-gcc9>0:devel/freebsd-gcc9@powerpc64
 powerpc64_elfv2_PKGNAMEPREFIX=	powerpc64-elfv2-
 powerpc64le_PKGNAMEPREFIX=	powerpc64le-
 
-USES=		perl5 python:3.6+,build tar:xz
+USES=		ninja:build perl5 python:3.6+,build tar:xz
 .if ${FLAVOR} == powerpc64_elfv1
 USE_GCC=	9:build
 .endif
diff --git a/lang/rust/Makefile b/lang/rust/Makefile
index 87c03cd4d9db..f7ad497453a1 100644
--- a/lang/rust/Makefile
+++ b/lang/rust/Makefile
@@ -28,11 +28,10 @@ IGNORE_FreeBSD_11_powerpc64=	is missing a bootstrap for FreeBSD 11.x powerpc64
 ONLY_FOR_ARCHS?=	aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le
 ONLY_FOR_ARCHS_REASON?=	requires prebuilt bootstrap compiler
 
-BUILD_DEPENDS=	cmake:devel/cmake \
-		ninja:devel/ninja
+BUILD_DEPENDS=	cmake:devel/cmake
 LIB_DEPENDS=	libcurl.so:ftp/curl
 
-USES=		pkgconfig python:3.6+,build ssl tar:xz
+USES=		ninja:build pkgconfig python:3.6+,build ssl tar:xz
 
 MAKE_ENV=	DESTDIR=${STAGEDIR} \
 		OPENSSL_DIR="${OPENSSLBASE}" \
diff --git a/math/py-pdal/Makefile b/math/py-pdal/Makefile
index 5c686f8e7266..3d555bc787d9 100644
--- a/math/py-pdal/Makefile
+++ b/math/py-pdal/Makefile
@@ -12,13 +12,12 @@ LICENSE=	BSD3CLAUSE
 
 BUILD_DEPENDS=	${PYNUMPY} \
 		${PYTHON_PKGNAMEPREFIX}scikit-build>0:devel/py-scikit-build@${PY_FLAVOR} \
-		${LOCALBASE}/bin/cmake:devel/cmake \
-		${LOCALBASE}/bin/ninja:devel/ninja
+		cmake:devel/cmake
 LIB_DEPENDS=	libpdal_base.so:math/pdal
 RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}packaging>=0:devel/py-packaging@${PY_FLAVOR} \
 		${PYNUMPY}
 
-USES=		compiler:c++11-lang python:3.6+
+USES=		compiler:c++11-lang ninja:build python:3.6+
 USE_PYTHON=	autoplist cython distutils
 
 post-install:
diff --git a/math/sage/Makefile b/math/sage/Makefile
index 300a38dd406c..35b1253e5192 100644
--- a/math/sage/Makefile
+++ b/math/sage/Makefile
@@ -142,7 +142,6 @@ BUILD_DEPENDS=	bash:shells/bash		\
 		pari-nftables>0:math/pari_nftables	\
 		pari-seadata>0:math/pari_seadata\
 		QuadraticSieve:math/flintqs	\
-		ninja:devel/ninja		\
 		gpatch:devel/patch		\
 		rubiks>0:math/rubiks		\
 		sympow:math/sympow		\
@@ -338,9 +337,10 @@ RUN_DEPENDS=	bash:shells/bash		\
 		yasm:devel/yasm			\
 		pixz:archivers/pixz
 
-USES=		autoreconf blaslapack:openblas compiler:c++11-lib fortran	\
-		gettext gmake gnome iconv jpeg libtool localbase ncurses perl5	\
-		pkgconfig python:3.7+ readline shebangfix sqlite tk xorg
+USES=		autoreconf blaslapack:openblas compiler:c++11-lib fortran \
+		gettext gmake gnome iconv jpeg libtool localbase ncurses \
+		ninja:build perl5 pkgconfig python:3.7+ readline shebangfix \
+		sqlite tk xorg
 USE_TEX=	latex:build pdftex:build tex:build
 USE_XORG=	x11 xext xscrnsaver
 USE_GNOME=	cairo glib20 pango
diff --git a/multimedia/handbrake/Makefile b/multimedia/handbrake/Makefile
index beb28467fd9c..82dd220b86d6 100644
--- a/multimedia/handbrake/Makefile
+++ b/multimedia/handbrake/Makefile
@@ -37,8 +37,8 @@ LIB_DEPENDS=	libdbus-1.so:devel/dbus \
 		libopus.so:audio/opus \
 		libjansson.so:devel/jansson
 
-USES=		autoreconf:build compiler:c11 gmake iconv \
-		libtool:build localbase:ldflags pkgconfig python:3.6+,build
+USES=		autoreconf:build compiler:c11 gmake iconv libtool:build \
+		localbase:ldflags ninja:build pkgconfig python:3.6+,build
 
 CONTRIB_FILES=	fdk-aac-2.0.1.tar.gz \
 		ffmpeg-4.2.3.tar.bz2 \
diff --git a/sysutils/fluxengine/Makefile b/sysutils/fluxengine/Makefile
index 745fba2af39b..f59f46613c09 100644
--- a/sysutils/fluxengine/Makefile
+++ b/sysutils/fluxengine/Makefile
@@ -8,9 +8,7 @@ COMMENT=	USB floppy disk interface for reading and writing non-PC disk formats
 LICENSE=	MIT
 LICENSE_FILE=	${WRKSRC}/COPYING.md
 
-BUILD_DEPENDS=	ninja:devel/ninja
-
-USES=		pkgconfig gmake compiler:gcc-c++11-lib sqlite
+USES=		compiler:gcc-c++11-lib gmake ninja:build pkgconfig sqlite
 
 USE_GITHUB=	yes
 GH_ACCOUNT=	davidgiven
diff --git a/www/deno/Makefile b/www/deno/Makefile
index 7b49f38716d7..304301d68144 100644
--- a/www/deno/Makefile
+++ b/www/deno/Makefile
@@ -15,7 +15,7 @@ BUILD_DEPENDS=	binutils>0:devel/binutils \
 		gn:devel/gn \
 		libunwind>0:devel/libunwind
 
-USES=	cargo ninja pkgconfig:build python:3.6+,build
+USES=		cargo ninja:build pkgconfig:build python:3.6+,build
 
 USE_GITHUB=	yes
 GH_ACCOUNT=	denoland
@@ -27,7 +27,7 @@ RUSTY_VERS=	0.21.0
 
 CARGO_ENV+=	CLANG_BASE_PATH=/usr \
 		GN=${PREFIX}/bin/gn \
-		NINJA=${PREFIX}/bin/ninja \
+		NINJA=${NINJA_CMD} \
 		V8_FROM_SOURCE=1
 RUSTFLAGS+=	-C link-arg=-fuse-ld=lld
 
diff --git a/www/qt5-webengine/Makefile b/www/qt5-webengine/Makefile
index 95e5dbb87031..1fd7501c7334 100644
--- a/www/qt5-webengine/Makefile
+++ b/www/qt5-webengine/Makefile
@@ -24,7 +24,6 @@ MAINTAINER=	kde@FreeBSD.org
 COMMENT=	Qt 5 library to render web content
 
 BUILD_DEPENDS=	bison:devel/bison \
-		ninja:devel/ninja \
 		yasm:devel/yasm \
 		${LOCALBASE}/include/linux/input.h:devel/evdev-proto \
 		${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat
@@ -72,7 +71,7 @@ SNDIO_VARS_OFF=		QMAKE_CONFIGURE_ARGS+=-no-sndio
 # We pass `norecursive' to USES=qmake because src/plugins/plugins.pro checks
 # whether webenginewidgets is available, which fails when qmake processes all
 # .pro files at once.
-USES=		gl gnome gperf jpeg python:2.7,build pkgconfig \
+USES=		gl gnome gperf jpeg ninja:build pkgconfig python:2.7,build \
 		qmake:norecursive,outsource qt-dist:5,webengine shebangfix xorg
 USE_GL=		gl
 USE_GNOME=	glib20 libxml2 libxslt



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104200659.13K6xZnl026714>