fix(status-go)_: add missing status-go dependencies (#16470)

Requires things like: go-bindata mockgen protobuf

Fixes:
https://github.com/status-im/status-desktop/issues/16477

For more details see:
https://github.com/status-im/status-go/pull/5878

Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
Igor Sirotin 2024-10-08 17:06:20 +03:00 committed by GitHub
parent 717a792e8c
commit a4646cd71c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 572 additions and 28 deletions

View File

@ -149,7 +149,7 @@ $(BOTTLES_DIR):
bottles: $(BOTTLES) bottles: $(BOTTLES)
endif endif
deps: | check-qt-dir deps-common bottles deps: | check-qt-dir deps-common status-go-deps bottles
update: | check-qt-dir update-common update: | check-qt-dir update-common
ifeq ($(detected_OS),Darwin) ifeq ($(detected_OS),Darwin)
@ -434,7 +434,7 @@ STATUSGO := vendor/status-go/build/bin/libstatus.$(LIBSTATUS_EXT)
STATUSGO_LIBDIR := $(shell pwd)/$(shell dirname "$(STATUSGO)") STATUSGO_LIBDIR := $(shell pwd)/$(shell dirname "$(STATUSGO)")
export STATUSGO_LIBDIR export STATUSGO_LIBDIR
$(STATUSGO): | deps $(STATUSGO): | deps status-go-deps
echo -e $(BUILD_MSG) "status-go" echo -e $(BUILD_MSG) "status-go"
# FIXME: Nix shell usage breaks builds due to Glibc mismatch. # FIXME: Nix shell usage breaks builds due to Glibc mismatch.
$(MAKE) -C vendor/status-go statusgo-shared-library SHELL=/bin/sh \ $(MAKE) -C vendor/status-go statusgo-shared-library SHELL=/bin/sh \
@ -442,6 +442,10 @@ $(STATUSGO): | deps
status-go: $(STATUSGO) status-go: $(STATUSGO)
status-go-deps:
go install go.uber.org/mock/mockgen@v0.4.0
go install github.com/kevinburke/go-bindata/v4/...@v4.0.2
status-go-clean: status-go-clean:
echo -e "\033[92mCleaning:\033[39m status-go" echo -e "\033[92mCleaning:\033[39m status-go"
rm -f $(STATUSGO) rm -f $(STATUSGO)

View File

@ -40,7 +40,7 @@ RUN apt update -yq && apt install -yq software-properties-common \
&& add-apt-repository -y ppa:git-core/ppa \ && add-apt-repository -y ppa:git-core/ppa \
&& add-apt-repository -y ppa:ubuntu-toolchain-r/test \ && add-apt-repository -y ppa:ubuntu-toolchain-r/test \
&& apt update -yq && apt full-upgrade -yq && apt install -yq --no-install-recommends --fix-missing \ && apt update -yq && apt full-upgrade -yq && apt install -yq --no-install-recommends --fix-missing \
gnupg2 openssh-client ca-certificates locales sudo jq curl wget fuse s3cmd file llvm tk-dev xz-utils \ gnupg2 openssh-client ca-certificates locales sudo jq curl wget fuse s3cmd file unzip llvm tk-dev xz-utils \
git make build-essential pkg-config extra-cmake-modules gcc-9 g++-9 \ git make build-essential pkg-config extra-cmake-modules gcc-9 g++-9 \
libgl1-mesa-dev libsm6 libice6 libfontconfig1 libdbus-1-3 libssl-dev libz-dev \ libgl1-mesa-dev libsm6 libice6 libfontconfig1 libdbus-1-3 libssl-dev libz-dev \
zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev unixodbc-dev libpq-dev \ zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev unixodbc-dev libpq-dev \
@ -89,6 +89,22 @@ RUN GOLANG_SHA256="e330e5d977bf4f3bdc157bc46cf41afa5b13d66c914e12fd6b694ccda65fc
&& rm "${GOLANG_TARBALL}" \ && rm "${GOLANG_TARBALL}" \
&& sudo ln -s /usr/local/go/bin/go /usr/local/bin && sudo ln -s /usr/local/go/bin/go /usr/local/bin
# Install Protoc
RUN PROTOC_SHA256="75d8a9d7a2c42566e46411750d589c51276242d8b6247a5724bac0f9283e05a8" \
&& PROTOC_TARBALL="protoc-3.20.0-linux-x86_64.zip" \
&& wget -q "https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/${PROTOC_TARBALL}" \
&& echo "${PROTOC_SHA256} ${PROTOC_TARBALL}" | sha256sum -c \
&& sudo unzip -d /usr/local "${PROTOC_TARBALL}" \
&& rm "${PROTOC_TARBALL}"
# Install Protoc-deg-go
RUN PROTOC_GEN_SHA256="0b2c257938a8cd9ba3506bbdbbaad45e51245b6f9e0743035ade7acf746c6be7" \
&& PROTOC_GEN_TARBALL="protoc-gen-go.v1.34.1.linux.amd64.tar.gz" \
&& wget -q "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.34.1/${PROTOC_GEN_TARBALL}" \
&& echo "${PROTOC_GEN_SHA256} ${PROTOC_GEN_TARBALL}" | sha256sum -c \
&& sudo tar -C /usr/local/bin -xzf "${PROTOC_GEN_TARBALL}" \
&& rm "${PROTOC_GEN_TARBALL}"
# Create Nix directory as root. # Create Nix directory as root.
RUN mkdir /nix && chown 1001:1001 /nix RUN mkdir /nix && chown 1001:1001 /nix
@ -98,6 +114,9 @@ RUN sudo groupadd -g 1001 jenkins \
USER jenkins USER jenkins
ENV HOME="/home/jenkins" ENV HOME="/home/jenkins"
# Access to tools installed by Go.
ENV PATH="${HOME}/go/bin:${PATH}"
# Nix for jenkins user to build status-go. # Nix for jenkins user to build status-go.
RUN curl -s https://nixos.org/releases/nix/nix-2.19.3/install | sh -s -- --no-daemon RUN curl -s https://nixos.org/releases/nix/nix-2.19.3/install | sh -s -- --no-daemon

View File

@ -10,7 +10,7 @@ pipeline {
/* Necessary image with Ubuntu 20.04 for older Glibc. */ /* Necessary image with Ubuntu 20.04 for older Glibc. */
docker { docker {
label 'linux' label 'linux'
image 'statusteam/nim-status-client-build:1.4.1-qt5.15.2' image 'statusteam/nim-status-client-build:1.5.0-qt5.15.2'
/* allows jenkins use cat and mounts '/dev/fuse' for linuxdeployqt */ /* allows jenkins use cat and mounts '/dev/fuse' for linuxdeployqt */
args '--entrypoint="" --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse' args '--entrypoint="" --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse'
} }
@ -66,14 +66,13 @@ pipeline {
PLATFORM = "linux/${getArch()}" PLATFORM = "linux/${getArch()}"
/* Improve make performance */ /* Improve make performance */
MAKEFLAGS = "-j4 V=${params.VERBOSE}" MAKEFLAGS = "-j4 V=${params.VERBOSE}"
/* Makefile assumes the compiler folder is included */
QTDIR = "/opt/qt/5.15.2/gcc_64"
PATH = "${env.QTDIR}/bin:${env.PATH}"
/* Avoid weird bugs caused by stale cache. */ /* Avoid weird bugs caused by stale cache. */
QML_DISABLE_DISK_CACHE = "true" QML_DISABLE_DISK_CACHE = "true"
/* Control output the filename */ /* Control output the filename */
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'AppImage', arch: getArch())}" STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'AppImage', arch: getArch())}"
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'tar.gz', arch: getArch())}" STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'tar.gz', arch: getArch())}"
/* prevent sharing cache dir across different jobs */
GO_GENERATE_FAST_DIR = "${env.WORKSPACE_TMP}/go-generate-fast"
} }
stages { stages {

View File

@ -63,6 +63,8 @@ pipeline {
/* Control output the filename */ /* Control output the filename */
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'nix.AppImage', arch: getArch())}" STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'nix.AppImage', arch: getArch())}"
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'nix.tar.gz', arch: getArch())}" STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'nix.tar.gz', arch: getArch())}"
/* prevent sharing cache dir across different jobs */
GO_GENERATE_FAST_DIR = "${env.WORKSPACE_TMP}/go-generate-fast"
} }
stages { stages {

View File

@ -68,13 +68,15 @@ pipeline {
/* WARNING: Qt 5.15.8 installed via Brew. */ /* WARNING: Qt 5.15.8 installed via Brew. */
QTDIR = '/opt/homebrew/opt/qt@5' QTDIR = '/opt/homebrew/opt/qt@5'
/* Enforce Go version installed infra-role-golang. */ /* Enforce Go version installed infra-role-golang. */
PATH = "${env.QTDIR}/bin:/usr/local/go/bin:${env.PATH}" PATH = "${env.QTDIR}/bin:${env.HOME}/go/bin:/usr/local/go/bin:${env.PATH}"
/* Avoid weird bugs caused by stale cache. */ /* Avoid weird bugs caused by stale cache. */
QML_DISABLE_DISK_CACHE = "true" QML_DISABLE_DISK_CACHE = "true"
/* Control output the filename */ /* Control output the filename */
STATUS_CLIENT_DMG = "pkg/${utils.pkgFilename(ext: 'dmg', arch: getArch())}" STATUS_CLIENT_DMG = "pkg/${utils.pkgFilename(ext: 'dmg', arch: getArch())}"
/* Apple Team ID for Notarization */ /* Apple Team ID for Notarization */
MACOS_NOTARIZE_TEAM_ID = "8B5X2M6H2Y" MACOS_NOTARIZE_TEAM_ID = "8B5X2M6H2Y"
/* prevent sharing cache dir across different jobs */
GO_GENERATE_FAST_DIR = "${env.WORKSPACE_TMP}/go-generate-fast"
} }
stages { stages {

View File

@ -70,7 +70,7 @@ pipeline {
MAKEFLAGS = "-j${utils.getProcCount()} V=${params.VERBOSE}" MAKEFLAGS = "-j${utils.getProcCount()} V=${params.VERBOSE}"
/* Explicitly set the QT version */ /* Explicitly set the QT version */
QTDIR = "/c/Qt/5.15.2/msvc2019_64" QTDIR = "/c/Qt/5.15.2/msvc2019_64"
PATH = "${env.QTDIR}/bin:${env.PATH}" PATH = "${env.QTDIR}/bin:${goPath()}/bin:${env.PATH}"
/* Avoid weird bugs caused by stale cache. */ /* Avoid weird bugs caused by stale cache. */
QML_DISABLE_DISK_CACHE = "true" QML_DISABLE_DISK_CACHE = "true"
/* Control output the filename */ /* Control output the filename */
@ -79,6 +79,8 @@ pipeline {
STATUS_CLIENT_7Z = "pkg/${utils.pkgFilename(ext: '7z', arch: getArch())}" STATUS_CLIENT_7Z = "pkg/${utils.pkgFilename(ext: '7z', arch: getArch())}"
/* Hack-fix for params not being set in env on first job run. */ /* Hack-fix for params not being set in env on first job run. */
WINDOWS_CODESIGN_TIMESTAMP_URL = "${params.WINDOWS_CODESIGN_TIMESTAMP_URL}" WINDOWS_CODESIGN_TIMESTAMP_URL = "${params.WINDOWS_CODESIGN_TIMESTAMP_URL}"
/* prevent sharing cache dir across different jobs */
GO_GENERATE_FAST_DIR = "${env.WORKSPACE_TMP}/go-generate-fast"
} }
stages { stages {
@ -142,3 +144,7 @@ def getArch() {
if (tokens.contains(arch)) { return arch } if (tokens.contains(arch)) { return arch }
} }
} }
def goPath() {
return sh(script: 'go env GOPATH', returnStdout: true).trim().replace('C:', '/c')
}

View File

@ -7,14 +7,19 @@
final: prev: let final: prev: let
inherit (prev) config stdenv callPackage recurseIntoAttrs makeOverridable fetchurl lib writeShellScriptBin __splicedPackages; inherit (prev) config stdenv callPackage recurseIntoAttrs makeOverridable fetchurl lib writeShellScriptBin __splicedPackages;
in rec { in {
linuxdeployqt = callPackage ./pkgs/linuxdeployqt/default.nix { }; # TODO: Remove once nixpkgs is upgraded.
mockgen = callPackage ./pkgs/mockgen { };
protobuf3_20 = callPackage ./pkgs/protobuf { };
protoc-gen-go = callPackage ./pkgs/protoc-gen-go { };
linuxdeployqt = callPackage ./pkgs/linuxdeployqt { };
# Copyied from d9424d2191d6439a276b69ae1fd0a800586135ca # Copyied from d9424d2191d6439a276b69ae1fd0a800586135ca
# 2018-07-27 -> 2020-12-31 # 2018-07-27 -> 2020-12-31
# TODO: override and upgrade # TODO: override and upgrade
# Copy is uses because of initial complexity of package override (probably due to fuse override) # Copy is uses because of initial complexity of package override (probably due to fuse override)
appimagekit = callPackage ./pkgs/appimagekit/default.nix { }; appimagekit = callPackage ./pkgs/appimagekit { };
# Requirement from Makefile - 3.19 # Requirement from Makefile - 3.19
cmake_3_19 = prev.cmake.overrideAttrs ( attrs : rec { cmake_3_19 = prev.cmake.overrideAttrs ( attrs : rec {
@ -33,6 +38,7 @@ in rec {
# TODO: compile, not binary # TODO: compile, not binary
# Binary is used because of initial complexity of both package override and copy from newer nixpkgs # Binary is used because of initial complexity of both package override and copy from newer nixpkgs
go_1_21 = callPackage ./pkgs/go/bootstrap121.nix { }; go_1_21 = callPackage ./pkgs/go/bootstrap121.nix { };
buildGo121Module = callPackage ./pkgs/go-module { go = final.go_1_21; };
# Fix for linuxdeployqt running ldd from nix with system shell # Fix for linuxdeployqt running ldd from nix with system shell
# ERROR: findDependencyInfo: "/bin/sh: /nix/store/HASH-glibc-2.31-74/lib/libc.so.6: version `GLIBC_2.33' not found (required by /bin/sh)\n/bin/sh: /nix/store/0c7c96gikmzv87i7lv3vq5s1cmfjd6zf-glibc-2.31-74/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/sh)" # ERROR: findDependencyInfo: "/bin/sh: /nix/store/HASH-glibc-2.31-74/lib/libc.so.6: version `GLIBC_2.33' not found (required by /bin/sh)\n/bin/sh: /nix/store/0c7c96gikmzv87i7lv3vq5s1cmfjd6zf-glibc-2.31-74/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/sh)"

View File

@ -0,0 +1,317 @@
{ go, cacert, git, lib, stdenv }:
{ name ? "${args'.pname}-${args'.version}"
, src
, nativeBuildInputs ? [ ]
, passthru ? { }
, patches ? [ ]
# A function to override the goModules derivation
, overrideModAttrs ? (_oldAttrs: { })
# path to go.mod and go.sum directory
, modRoot ? "./"
# vendorHash is the SRI hash of the vendored dependencies
#
# if vendorHash is null, then we won't fetch any dependencies and
# rely on the vendor folder within the source.
, vendorHash ? throw (
if args'?vendorSha256 then
"buildGoModule: Expect vendorHash instead of vendorSha256"
else
"buildGoModule: vendorHash is missing"
)
# Whether to delete the vendor folder supplied with the source.
, deleteVendor ? false
# Whether to fetch (go mod download) and proxy the vendor directory.
# This is useful if your code depends on c code and go mod tidy does not
# include the needed sources to build or if any dependency has case-insensitive
# conflicts which will produce platform dependant `vendorHash` checksums.
, proxyVendor ? false
# We want parallel builds by default
, enableParallelBuilding ? true
# Do not enable this without good reason
# IE: programs coupled with the compiler
, allowGoReference ? false
, CGO_ENABLED ? 1
, meta ? { }
# Not needed with buildGoModule
, goPackagePath ? ""
, ldflags ? [ ]
, GOFLAGS ? [ ]
# needed for buildFlags{,Array} warning
, buildFlags ? ""
, buildFlagsArray ? ""
, ...
}@args':
assert goPackagePath != "" -> throw "`goPackagePath` is not needed with `buildGoModule`";
let
args = removeAttrs args' [ "overrideModAttrs" "vendorSha256" "vendorHash" ];
GO111MODULE = "on";
GOTOOLCHAIN = "local";
goModules = if (vendorHash == null) then "" else
(stdenv.mkDerivation {
name = "${name}-go-modules";
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ go git cacert ];
inherit (args) src;
inherit (go) GOOS GOARCH;
inherit GO111MODULE GOTOOLCHAIN;
# The following inheritence behavior is not trivial to expect, and some may
# argue it's not ideal. Changing it may break vendor hashes in Nixpkgs and
# out in the wild. In anycase, it's documented in:
# doc/languages-frameworks/go.section.md
prePatch = args.prePatch or "";
patches = args.patches or [ ];
patchFlags = args.patchFlags or [ ];
postPatch = args.postPatch or "";
preBuild = args.preBuild or "";
postBuild = args.modPostBuild or "";
sourceRoot = args.sourceRoot or "";
# Commented out due to incomprehensible Nix errors.
#env = args.env or { };
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [
"GIT_PROXY_COMMAND"
"SOCKS_SERVER"
"GOPROXY"
];
configurePhase = args.modConfigurePhase or ''
runHook preConfigure
export GOCACHE=$TMPDIR/go-cache
export GOPATH="$TMPDIR/go"
cd "${modRoot}"
runHook postConfigure
'';
buildPhase = args.modBuildPhase or (''
runHook preBuild
'' + lib.optionalString deleteVendor ''
if [ ! -d vendor ]; then
echo "vendor folder does not exist, 'deleteVendor' is not needed"
exit 10
else
rm -rf vendor
fi
'' + ''
if [ -d vendor ]; then
echo "vendor folder exists, please set 'vendorHash = null;' in your expression"
exit 10
fi
${if proxyVendor then ''
mkdir -p "''${GOPATH}/pkg/mod/cache/download"
go mod download
'' else ''
if (( "''${NIX_DEBUG:-0}" >= 1 )); then
goModVendorFlags+=(-v)
fi
go mod vendor "''${goModVendorFlags[@]}"
''}
mkdir -p vendor
runHook postBuild
'');
installPhase = args.modInstallPhase or ''
runHook preInstall
${if proxyVendor then ''
rm -rf "''${GOPATH}/pkg/mod/cache/download/sumdb"
cp -r --reflink=auto "''${GOPATH}/pkg/mod/cache/download" $out
'' else ''
cp -r --reflink=auto vendor $out
''}
if ! [ "$(ls -A $out)" ]; then
echo "vendor folder is empty, please set 'vendorHash = null;' in your expression"
exit 10
fi
runHook postInstall
'';
dontFixup = true;
outputHashMode = "recursive";
outputHash = vendorHash;
# Handle empty vendorHash; avoid
# error: empty hash requires explicit hash algorithm
outputHashAlgo = if vendorHash == "" then "sha256" else null;
}).overrideAttrs overrideModAttrs;
package = stdenv.mkDerivation (args // {
nativeBuildInputs = [ go ] ++ nativeBuildInputs;
inherit (go) GOOS GOARCH;
GOFLAGS = GOFLAGS
++ (lib.optional (!proxyVendor) "-mod=vendor")
++ (lib.optional (!allowGoReference) "-trimpath");
inherit CGO_ENABLED enableParallelBuilding GO111MODULE GOTOOLCHAIN;
# If not set to an explicit value, set the buildid empty for reproducibility.
ldflags = ldflags ++ lib.optional (!lib.any (lib.hasPrefix "-buildid=") ldflags) "-buildid=";
configurePhase = args.configurePhase or (''
runHook preConfigure
export GOCACHE=$TMPDIR/go-cache
export GOPATH="$TMPDIR/go"
export GOPROXY=off
export GOSUMDB=off
cd "$modRoot"
'' + lib.optionalString (vendorHash != null) ''
${if proxyVendor then ''
export GOPROXY=file://${goModules}
'' else ''
rm -rf vendor
cp -r --reflink=auto ${goModules} vendor
''}
'' + ''
# currently pie is only enabled by default in pkgsMusl
# this will respect the `hardening{Disable,Enable}` flags if set
if [[ $NIX_HARDENING_ENABLE =~ "pie" ]]; then
export GOFLAGS="-buildmode=pie $GOFLAGS"
fi
runHook postConfigure
'');
buildPhase = args.buildPhase or ''
runHook preBuild
exclude='\(/_\|examples\|Godeps\|testdata'
if [[ -n "$excludedPackages" ]]; then
IFS=' ' read -r -a excludedArr <<<$excludedPackages
printf -v excludedAlternates '%s\\|' "''${excludedArr[@]}"
excludedAlternates=''${excludedAlternates%\\|} # drop final \| added by printf
exclude+='\|'"$excludedAlternates"
fi
exclude+='\)'
buildGoDir() {
local cmd="$1" dir="$2"
. $TMPDIR/buildFlagsArray
declare -a flags
flags+=($buildFlags "''${buildFlagsArray[@]}")
flags+=(''${tags:+-tags=''${tags// /,}})
flags+=(''${ldflags:+-ldflags="$ldflags"})
flags+=("-p" "$NIX_BUILD_CORES")
if [ "$cmd" = "test" ]; then
flags+=(-vet=off)
flags+=($checkFlags)
fi
local OUT
if ! OUT="$(go $cmd "''${flags[@]}" $dir 2>&1)"; then
if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then
echo "$OUT" >&2
return 1
fi
fi
if [ -n "$OUT" ]; then
echo "$OUT" >&2
fi
return 0
}
getGoDirs() {
local type;
type="$1"
if [ -n "$subPackages" ]; then
echo "$subPackages" | sed "s,\(^\| \),\1./,g"
else
find . -type f -name \*$type.go -exec dirname {} \; | grep -v "/vendor/" | sort --unique | grep -v "$exclude"
fi
}
if (( "''${NIX_DEBUG:-0}" >= 1 )); then
buildFlagsArray+=(-x)
fi
if [ ''${#buildFlagsArray[@]} -ne 0 ]; then
declare -p buildFlagsArray > $TMPDIR/buildFlagsArray
else
touch $TMPDIR/buildFlagsArray
fi
if [ -z "$enableParallelBuilding" ]; then
export NIX_BUILD_CORES=1
fi
for pkg in $(getGoDirs ""); do
echo "Building subPackage $pkg"
buildGoDir install "$pkg"
done
'' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
# normalize cross-compiled builds w.r.t. native builds
(
dir=$GOPATH/bin/${go.GOOS}_${go.GOARCH}
if [[ -n "$(shopt -s nullglob; echo $dir/*)" ]]; then
mv $dir/* $dir/..
fi
if [[ -d $dir ]]; then
rmdir $dir
fi
)
'' + ''
runHook postBuild
'';
doCheck = args.doCheck or true;
checkPhase = args.checkPhase or ''
runHook preCheck
# We do not set trimpath for tests, in case they reference test assets
export GOFLAGS=''${GOFLAGS//-trimpath/}
for pkg in $(getGoDirs test); do
buildGoDir test "$pkg"
done
runHook postCheck
'';
installPhase = args.installPhase or ''
runHook preInstall
mkdir -p $out
dir="$GOPATH/bin"
[ -e "$dir" ] && cp -r $dir $out
runHook postInstall
'';
strictDeps = true;
disallowedReferences = lib.optional (!allowGoReference) go;
passthru = passthru // { inherit go goModules vendorHash; };
meta = {
# Add default meta information
platforms = go.meta.platforms or lib.platforms.all;
} // meta;
});
in
package

View File

@ -4,17 +4,15 @@ let
if platform.isDarwin then "darwin" if platform.isDarwin then "darwin"
else platform.parsed.kernel.name; else platform.parsed.kernel.name;
toGoCPU = platform: { goarch = platform: {
"i686" = "386";
"x86_64" = "amd64";
"aarch64" = "arm64"; "aarch64" = "arm64";
"armv6l" = "armv6l"; "arm" = "arm";
"armv7l" = "armv6l"; "armv6l" = "arm";
"powerpc64le" = "ppc64le"; "armv7l" = "arm";
"riscv64" = "riscv64"; "x86_64" = "amd64";
}.${platform.parsed.cpu.name} or (throw "Unsupported CPU ${platform.parsed.cpu.name}"); }.${platform.parsed.cpu.name} or (throw "Unsupported system: ${platform.parsed.cpu.name}");
toGoPlatform = platform: "${toGoKernel platform}-${toGoCPU platform}"; toGoPlatform = platform: "${toGoKernel platform}-${goarch platform}";
platform = toGoPlatform stdenv.hostPlatform; platform = toGoPlatform stdenv.hostPlatform;
in in
@ -38,4 +36,7 @@ stdenv.mkDerivation rec {
ln -s $out/share/go/bin/go $out/bin/go ln -s $out/share/go/bin/go $out/bin/go
runHook postInstall runHook postInstall
''; '';
GOOS = stdenv.targetPlatform.parsed.kernel.name;
GOARCH = goarch stdenv.targetPlatform;
} }

View File

@ -0,0 +1,34 @@
{ buildGo121Module, fetchFromGitHub, lib }:
buildGo121Module rec {
pname = "mockgen";
version = "0.4.0";
src = fetchFromGitHub {
owner = "uber-go";
repo = "mock";
rev = "v${version}";
sha256 = "sha256-3nt70xrZisK5vgQa+STZPiY4F9ITKw8PbBWcKoBn4Vc=";
};
vendorHash = "sha256-mcNVud2jzvlPPQEaar/eYZkP71V2Civz+R5v10+tewA=";
CGO_ENABLED = 0;
subPackages = [ "mockgen" ];
ldflags = [
"-X=main.version=${version}"
"-X=main.date=1970-01-01T00:00:00Z"
"-X=main.commit=unknown"
];
meta = with lib; {
description = "GoMock is a mocking framework for the Go programming language";
homepage = "https://github.com/uber-go/mock";
changelog = "https://github.com/uber-go/mock/blob/v${version}/CHANGELOG.md";
license = licenses.asl20;
maintainers = with maintainers; [ bouk ];
mainProgram = "mockgen";
};
}

View File

@ -0,0 +1,49 @@
{ lib, stdenv, fetchFromGitHub, autoreconfHook, zlib, gtest, buildPackages }:
stdenv.mkDerivation rec {
pname = "protobuf";
version = "3.20.3";
# make sure you test also -A pythonPackages.protobuf
src = fetchFromGitHub {
owner = "protocolbuffers";
repo = "protobuf";
rev = "v${version}";
sha256 = "sha256-u/1Yb8+mnDzc3OwirpGESuhjkuKPgqDAvlgo3uuzbbk=";
};
postPatch = ''
rm -rf gmock
cp -r ${gtest.src}/googlemock gmock
cp -r ${gtest.src}/googletest googletest
chmod -R a+w gmock
chmod -R a+w googletest
ln -s ../googletest gmock/gtest
'' + lib.optionalString stdenv.isDarwin ''
substituteInPlace src/google/protobuf/testing/googletest.cc \
--replace 'tmpnam(b)' '"'$TMPDIR'/foo"'
'';
nativeBuildInputs = [ autoreconfHook buildPackages.which buildPackages.stdenv.cc ];
buildInputs = [ zlib ];
enableParallelBuilding = true;
doCheck = true;
dontDisableStatic = true;
meta = {
description = "Google's data interchange format";
longDescription =
''Protocol Buffers are a way of encoding structured data in an efficient
yet extensible format. Google uses Protocol Buffers for almost all of
its internal RPC protocols and file formats.
'';
homepage = "https://developers.google.com/protocol-buffers/";
license = lib.licenses.bsd3;
mainProgram = "protoc";
platforms = lib.platforms.unix;
};
}

View File

@ -0,0 +1,59 @@
{ lib, stdenv
, fetchFromGitHub
, autoreconfHook, zlib, gtest, buildPackages
, ...
}:
let
mkProtobufDerivation = buildProtobuf: stdenv: stdenv.mkDerivation {
pname = "protobuf";
version = "3.20.3";
sha256 = "sha256-u/1Yb8+mnDzc3OwirpGESuhjkuKPgqDAvlgo3uuzbbk=";
# make sure you test also -A pythonPackages.protobuf
src = fetchFromGitHub {
owner = "protocolbuffers";
repo = "protobuf";
rev = "v${version}";
inherit sha256;
};
postPatch = ''
rm -rf gmock
cp -r ${gtest.src}/googlemock gmock
cp -r ${gtest.src}/googletest googletest
chmod -R a+w gmock
chmod -R a+w googletest
ln -s ../googletest gmock/gtest
'' + lib.optionalString stdenv.isDarwin ''
substituteInPlace src/google/protobuf/testing/googletest.cc \
--replace 'tmpnam(b)' '"'$TMPDIR'/foo"'
'';
nativeBuildInputs = [ autoreconfHook buildPackages.which buildPackages.stdenv.cc buildProtobuf ];
buildInputs = [ zlib ];
configureFlags = lib.optional (buildProtobuf != null) "--with-protoc=${buildProtobuf}/bin/protoc";
enableParallelBuilding = true;
doCheck = true;
dontDisableStatic = true;
meta = {
description = "Google's data interchange format";
longDescription =
''Protocol Buffers are a way of encoding structured data in an efficient
yet extensible format. Google uses Protocol Buffers for almost all of
its internal RPC protocols and file formats.
'';
homepage = "https://developers.google.com/protocol-buffers/";
license = lib.licenses.bsd3;
mainProgram = "protoc";
platforms = lib.platforms.unix;
};
};
in mkProtobufDerivation(if (stdenv.buildPlatform != stdenv.hostPlatform)
then (mkProtobufDerivation null buildPackages.stdenv)
else null) stdenv

View File

@ -0,0 +1,27 @@
{ pkgs ? import <nixpkgs> { } }:
let
inherit (pkgs) lib buildGo121Module fetchFromGitHub;
in buildGo121Module rec {
pname = "protoc-gen-go";
version = "1.34.1";
src = fetchFromGitHub {
owner = "protocolbuffers";
repo = "protobuf-go";
rev = "v${version}";
sha256 = "sha256-xbfqN/t6q5dFpg1CkxwxAQkUs8obfckMDqytYzuDwF4=";
};
vendorHash = "sha256-nGI/Bd6eMEoY0sBwWEtyhFowHVvwLKjbT4yfzFz6Z3E=";
subPackages = [ "cmd/protoc-gen-go" ];
meta = with lib; {
description = "Go support for Google's protocol buffers";
mainProgram = "protoc-gen-go";
homepage = "https://google.golang.org/protobuf";
license = licenses.bsd3;
maintainers = with lib.maintainers; [ jojosch ];
};
}

View File

@ -15,7 +15,7 @@ function check_version {
function install_build_dependencies { function install_build_dependencies {
echo "Install build dependencies" echo "Install build dependencies"
brew install cmake pkg-config libtool jq node@18 yarn brew install cmake pkg-config libtool jq node@18 yarn protoc-gen-go
} }
function install_qt { function install_qt {

View File

@ -15,9 +15,10 @@ function check_version {
function install_build_dependencies { function install_build_dependencies {
echo "Install build dependencies" echo "Install build dependencies"
apt update apt update
apt install -yq git build-essential pkg-config mesa-common-dev unixodbc-dev libpq-dev \ apt install -yq git wget build-essential \
libglu1-mesa-dev wget libpcsclite-dev libpcre3-dev libssl-dev libpulse-mainloop-glib0 \ cmake extra-cmake-modules pkg-config protoc-gen-go \
libxkbcommon-x11-dev extra-cmake-modules cmake mesa-common-dev unixodbc-dev libpq-dev libglu1-mesa-dev libpcsclite-dev \
libpcre3-dev libssl-dev libpulse-mainloop-glib0 libxkbcommon-x11-dev
} }
function install_release_dependencies { function install_release_dependencies {
@ -87,7 +88,7 @@ SUCCESS!
Before you attempt to build status-dektop you'll need a few environment variables set: Before you attempt to build status-dektop you'll need a few environment variables set:
export QTDIR=${QT_INSTALL_DIR}/${QT_VERSION}/gcc_64 export QTDIR=${QT_INSTALL_DIR}/${QT_VERSION}/gcc_64
export PATH=\$QTDIR:\$QTDIR/bin:\$PATH export PATH=\$QTDIR:\$QTDIR/bin:\$(go env GOPATH)\bin:$PATH
" "
echo $msg echo $msg
} }

View File

@ -12,6 +12,21 @@ function Install-Scoop {
} }
} }
# Install Protobuf tool necessary to generate status-go files.
function Install-Protobuf-Go {
$ProtocGenVersion = "v1.34.1"
$ProtocGenZIP = "protoc-gen-go.$ProtocGenVersion.windows.amd64.zip"
$ProtocGenURL = "https://github.com/protocolbuffers/protobuf-go/releases/download/$ProtocGenVersion/$ProtocGenZIP"
$ProtocGenSHA256 = "403a619c4698fe5c4162c7f855803de3e8d8e0c187d7d51cbeb8d599f7a5a073"
(New-Object System.Net.WebClient).DownloadFile($ProtocGenURL, "$env:USERPROFILE\$ProtocGenZIP")
$ProtocGenRealSHA256 = (Get-Filehash -algorithm SHA256 "$env:USERPROFILE\$ProtocGenZIP").Hash
if ($ProtocGenRealSHA256 -ne $ProtocGenSHA256) {
throw "SHA256 hash does not match for $ProtocGenZIP !"
}
New-Item "$env:USERPROFILE\go\bin" -ItemType Directory -ea 0
7z x -o="$env:USERPROFILE\go\bin" -y "$env:USERPROFILE\$ProtocGenZIP"
}
# Install Git and other dependencies # Install Git and other dependencies
function Install-Dependencies { function Install-Dependencies {
Write-Host "Installing dependencies..." Write-Host "Installing dependencies..."
@ -19,6 +34,7 @@ function Install-Dependencies {
scoop bucket add extras scoop bucket add extras
} }
scoop install --global go@1.21.10 scoop install --global go@1.21.10
scoop install --global protobuf@3.20.0
scoop install --global vcredist2022 scoop install --global vcredist2022
scoop install --global ` scoop install --global `
7zip git dos2unix findutils ` 7zip git dos2unix findutils `
@ -70,6 +86,7 @@ export VCINSTALLDIR="/c/BuildTools/VC"
You might also have to include the following paths in your `$PATH: You might also have to include the following paths in your `$PATH:
export PATH=`"$env:USERPROFILE/go/bin:`$PATH`"
export PATH=`"/c/BuildTools/MSBuild/Current/Bin:`$PATH`" export PATH=`"/c/BuildTools/MSBuild/Current/Bin:`$PATH`"
export PATH=`"/c/BuildTools/VC/Tools/MSVC/14.29.30133/bin:`$PATH`" export PATH=`"/c/BuildTools/VC/Tools/MSVC/14.29.30133/bin:`$PATH`"
export PATH=`"/c/ProgramData/scoop/apps/inno-setup/current:`$PATH`" export PATH=`"/c/ProgramData/scoop/apps/inno-setup/current:`$PATH`"
@ -87,6 +104,7 @@ $QtVersion = "5.15.2"
If ($MyInvocation.InvocationName -ne ".") { If ($MyInvocation.InvocationName -ne ".") {
Install-Scoop Install-Scoop
Install-Dependencies Install-Dependencies
Install-Protobuf-Go
Install-Qt-SDK Install-Qt-SDK
Install-VC-BuildTools Install-VC-BuildTools
Show-Success-Message Show-Success-Message

View File

@ -29,7 +29,7 @@ in pkgs.mkShell {
linuxdeployqt appimagekit linuxdeployqt appimagekit
libglvnd # TODO: Qt 5.15.2 fix, review after upgrade libglvnd # TODO: Qt 5.15.2 fix, review after upgrade
cmake_3_19 gnumake pkg-config gnugrep qtCustom cmake_3_19 gnumake pkg-config gnugrep qtCustom
go_1_21 go_1_21 go-bindata mockgen protobuf3_20 protoc-gen-go
pcre nss pcsclite extra-cmake-modules pcre nss pcsclite extra-cmake-modules
xorg.libxcb xorg.libX11 libxkbcommon xorg.libxcb xorg.libX11 libxkbcommon
] ++ (with gst_all_1; [ ] ++ (with gst_all_1; [

2
vendor/status-go vendored

@ -1 +1 @@
Subproject commit e8e6ef352b80c3a98572e48147384fe76f813b52 Subproject commit ba37c32c07d1b05a94d1c7f7cb1b38fb82730f7b