From 34fb737d9cb65003fddc87113268ec2a221e3f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20L=C3=BCtke=20Stetzkamp?= Date: Sun, 17 Sep 2023 12:52:28 +0200 Subject: [PATCH] justbuild: init at 1.2.1 --- pkgs/by-name/ju/justbuild/package.nix | 175 ++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 pkgs/by-name/ju/justbuild/package.nix diff --git a/pkgs/by-name/ju/justbuild/package.nix b/pkgs/by-name/ju/justbuild/package.nix new file mode 100644 index 000000000000..fd9acbc6dc46 --- /dev/null +++ b/pkgs/by-name/ju/justbuild/package.nix @@ -0,0 +1,175 @@ +{ + stdenv, + fetchFromGitHub, + fetchurl, + + fmt_10, + nlohmann_json, + cli11, + microsoft-gsl, + libgit2, + openssl, + + pkg-config, + protobuf3_23, + grpc, + pandoc, + python3, + unzip, + wget, + lib, + jq, + + curl, + libarchive, +}: +stdenv.mkDerivation rec { + pname = "justbuild"; + version = "1.2.1"; + + src = fetchFromGitHub { + owner = "just-buildsystem"; + repo = "justbuild"; + rev = "v${version}"; + sha256 = "sha256-5Fz/ID7xKbt6pq2B5/MOS6f2xUnKGvmNAYuPboPwKJY="; + }; + + bazelapi = fetchurl { + url = "https://github.com/bazelbuild/remote-apis/archive/e1fe21be4c9ae76269a5a63215bb3c72ed9ab3f0.tar.gz"; + sha256 = "7421abd5352ccf927c2050453a4dbfa1f7b1c7170ec3e8702b6fe2d39b8805fe"; + }; + + googleapi = fetchurl { + url = "https://github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz"; + sha256 = "5bb6b0253ccf64b53d6c7249625a7e3f6c3bc6402abd52d3778bfa48258703a0"; + }; + + nativeBuildInputs = + [ + # Tools for the bootstrap process + jq + pkg-config + python3 + unzip + wget + + # Dependencies of just + cli11 + # Using fmt 10 because this is the same version upstream currently + # uses for bundled builds + # For future updates: The currently used version can be found in the file + # etc/repos.json: https://github.com/just-buildsystem/justbuild/blob/master/etc/repos.json + # under the key .repositories.fmt + fmt_10 + microsoft-gsl + nlohmann_json + + # Dependencies of the compiled just-mr + curl + libarchive + ]; + + buildInputs = [ + grpc + libgit2 + openssl + # Using protobuf 23 because this is the same version upstream currently + # uses for bundled builds + # For future updates: The currently used version can be found in the file + # etc/repos.json: https://github.com/just-buildsystem/justbuild/blob/master/etc/repos.json + # under the key .repositories.protobuf + protobuf3_23 + python3 + ]; + + postPatch = '' + sed -ie 's|\./bin/just-mr.py|${python3}/bin/python3 ./bin/just-mr.py|' bin/bootstrap.py + sed -ie 's|#!/usr/bin/env python3|#!${python3}/bin/python3|' bin/parallel-bootstrap-traverser.py + jq '.repositories.protobuf.pkg_bootstrap.local_path = "${protobuf3_23}"' etc/repos.json > etc/repos.json.patched + mv etc/repos.json.patched etc/repos.json + jq '.repositories.com_github_grpc_grpc.pkg_bootstrap.local_path = "${grpc}"' etc/repos.json > etc/repos.json.patched + mv etc/repos.json.patched etc/repos.json + jq '.unknown.PATH = []' etc/toolchain/CC/TARGETS > etc/toolchain/CC/TARGETS.patched + mv etc/toolchain/CC/TARGETS.patched etc/toolchain/CC/TARGETS + ''; + + /* The build phase follows the bootstrap procedure that is explained in + https://github.com/just-buildsystem/justbuild/blob/master/INSTALL.md + + The bootstrap of the just binary depends on two proto libraries, which are + supplied as external distfiles. + + The microsoft-gsl library does not provide a pkg-config file, so one is + created here. In case also the GNU Scientific Library would be used (which + has also the pkg-config name gsl) this would cause a conflict. However, it + is very unlikely that a build tool will ever depend on a GPL math library. + + The extra build flags (ADD_CFLAGS and ADD_CXXFLAGS) are only needed in the + current version of just, the next release will contain a fix from upstream. + https://github.com/just-buildsystem/justbuild/commit/5abcd4140a91236c7bda1c21ce69e76a28da7c8a + + */ + + buildPhase = '' + runHook preBuild + + mkdir .distfiles + ln -s ${bazelapi} .distfiles/e1fe21be4c9ae76269a5a63215bb3c72ed9ab3f0.tar.gz + ln -s ${googleapi} .distfiles/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz + + mkdir .pkgconfig + cat << __EOF__ > .pkgconfig/gsl.pc + Name: gsl + Version: n/a + Description: n/a + URL: n/a + Cflags: -I${microsoft-gsl}/include + __EOF__ + export PKG_CONFIG_PATH=`pwd`/.pkgconfig''${PKG_CONFIG_PATH:+:}$PKG_CONFIG_PATH + + + # Bootstrap just + export PACKAGE=YES + export NON_LOCAL_DEPS='[ "google_apis", "bazel_remote_apis" ]' + export JUST_BUILD_CONF=`echo $PATH | jq -R '{ ENV: { PATH: . }, "ADD_CFLAGS": ["-Wno-error=pedantic"], "ADD_CXXFLAGS": ["-Wno-error=pedantic"] }'` + + mkdir ../build + python3 ./bin/bootstrap.py `pwd` ../build "`pwd`/.distfiles" + + # Build compiled just-mr + mkdir ../build-root + ../build/out/bin/just install 'installed just-mr' -c ../build/build-conf.json -C ../build/repo-conf.json --output-dir ../build/out --local-build-root ../build-root + + # convert man pages from Markdown to man + find "./share/man" -name "*.md" -exec sh -c '${pandoc}/bin/pandoc --standalone --to man -o "''${0%.md}.man" "''${0}"' {} \; + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p "$out/bin" + + + install -m 755 -Dt "$out/bin" "../build/out/bin/just" + install -m 755 -Dt "$out/bin" "../build/out/bin/just-mr" + install -m 755 -DT "bin/just-import-git.py" "$out/bin/just-import-git" + + mkdir -p "$out/share/bash-completion/completions" + install -m 0644 ./share/just_complete.bash "$out/share/bash-completion/completions/just" + + mkdir -p "$out/share/man/"{man1,man5} + install -m 0644 -t "$out/share/man/man1" ./share/man/*.1.man + install -m 0644 -t "$out/share/man/man5" ./share/man/*.5.man + + runHook postInstall + ''; + + meta = with lib; { + broken = stdenv.isDarwin; + description = "a generic build tool"; + homepage = "https://github.com/just-buildsystem/justbuild"; + license = licenses.asl20; + maintainers = with maintainers; [clkamp]; + }; +}