ci: build in nix shell
This commit is contained in:
parent
e2d7265d5b
commit
e98f076f45
22
Makefile
22
Makefile
|
@ -569,16 +569,22 @@ endif
|
||||||
|
|
||||||
nim_status_client: force-rebuild-status-go $(NIM_STATUS_CLIENT)
|
nim_status_client: force-rebuild-status-go $(NIM_STATUS_CLIENT)
|
||||||
|
|
||||||
_APPIMAGE_TOOL := appimagetool-x86_64.AppImage
|
ifdef IN_NIX_SHELL
|
||||||
APPIMAGE_TOOL := tmp/linux/tools/$(_APPIMAGE_TOOL)
|
APPIMAGE_TOOL := appimagetool
|
||||||
|
else
|
||||||
|
APPIMAGE_TOOL := tmp/linux/tools/appimagetool
|
||||||
|
endif
|
||||||
|
|
||||||
|
_APPIMAGE_TOOL := appimagetool-x86_64.AppImage
|
||||||
$(APPIMAGE_TOOL):
|
$(APPIMAGE_TOOL):
|
||||||
|
ifndef IN_NIX_SHELL
|
||||||
echo -e "\033[92mFetching:\033[39m appimagetool"
|
echo -e "\033[92mFetching:\033[39m appimagetool"
|
||||||
rm -rf tmp/linux
|
rm -rf tmp/linux
|
||||||
mkdir -p tmp/linux/tools
|
mkdir -p tmp/linux/tools
|
||||||
wget -nv https://github.com/AppImage/AppImageKit/releases/download/continuous/$(_APPIMAGE_TOOL)
|
wget -nv https://github.com/AppImage/AppImageKit/releases/download/continuous/$(_APPIMAGE_TOOL)
|
||||||
mv $(_APPIMAGE_TOOL) tmp/linux/tools/
|
mv $(_APPIMAGE_TOOL) tmp/linux/tools/appimagetool
|
||||||
chmod +x $(APPIMAGE_TOOL)
|
chmod +x $(APPIMAGE_TOOL)
|
||||||
|
endif
|
||||||
|
|
||||||
STATUS_CLIENT_APPIMAGE ?= pkg/Status.AppImage
|
STATUS_CLIENT_APPIMAGE ?= pkg/Status.AppImage
|
||||||
STATUS_CLIENT_TARBALL ?= pkg/Status.tar.gz
|
STATUS_CLIENT_TARBALL ?= pkg/Status.tar.gz
|
||||||
|
@ -623,16 +629,22 @@ $(STATUS_CLIENT_APPIMAGE): nim_status_client $(APPIMAGE_TOOL) nim-status.desktop
|
||||||
cp bin/StatusQ/* tmp/linux/dist/usr/bin/StatusQ
|
cp bin/StatusQ/* tmp/linux/dist/usr/bin/StatusQ
|
||||||
|
|
||||||
# Libraries
|
# Libraries
|
||||||
|
ifndef IN_NIX_SHELL
|
||||||
cp -r /usr/lib/x86_64-linux-gnu/nss tmp/linux/dist/usr/lib/
|
cp -r /usr/lib/x86_64-linux-gnu/nss tmp/linux/dist/usr/lib/
|
||||||
cp -P /usr/lib/x86_64-linux-gnu/libgst* tmp/linux/dist/usr/lib/
|
cp -P /usr/lib/x86_64-linux-gnu/libgst* tmp/linux/dist/usr/lib/
|
||||||
cp -r /usr/lib/x86_64-linux-gnu/gstreamer-1.0 tmp/linux/dist/usr/lib/
|
cp -r /usr/lib/x86_64-linux-gnu/gstreamer-1.0 tmp/linux/dist/usr/lib/
|
||||||
cp -r /usr/lib/x86_64-linux-gnu/gstreamer1.0 tmp/linux/dist/usr/lib/
|
cp -r /usr/lib/x86_64-linux-gnu/gstreamer1.0 tmp/linux/dist/usr/lib/
|
||||||
|
endif
|
||||||
cp vendor/status-go/build/bin/libstatus.so tmp/linux/dist/usr/lib/
|
cp vendor/status-go/build/bin/libstatus.so tmp/linux/dist/usr/lib/
|
||||||
cp vendor/status-go/build/bin/libstatus.so.0 tmp/linux/dist/usr/lib/
|
cp vendor/status-go/build/bin/libstatus.so.0 tmp/linux/dist/usr/lib/
|
||||||
cp $(STATUSKEYCARDGO) tmp/linux/dist/usr/lib/
|
cp $(STATUSKEYCARDGO) tmp/linux/dist/usr/lib/
|
||||||
|
|
||||||
echo -e $(BUILD_MSG) "AppImage"
|
echo -e $(BUILD_MSG) "AppImage"
|
||||||
|
|
||||||
linuxdeployqt tmp/linux/dist/nim-status.desktop -no-copy-copyright-files -qmldir=ui -qmlimport=$(QT5_QMLDIR) -bundle-non-qt-libs
|
linuxdeployqt tmp/linux/dist/nim-status.desktop -no-copy-copyright-files -qmldir=ui -qmlimport=$(QT5_QMLDIR) -bundle-non-qt-libs
|
||||||
|
ifdef IN_NIX_SHELL
|
||||||
|
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 tmp/linux/dist/usr/bin/nim_status_client
|
||||||
|
endif
|
||||||
|
|
||||||
# Qt plugins
|
# Qt plugins
|
||||||
cp $(FCITX5_QT) tmp/linux/dist/usr/plugins/platforminputcontexts/
|
cp $(FCITX5_QT) tmp/linux/dist/usr/plugins/platforminputcontexts/
|
||||||
|
@ -642,6 +654,10 @@ $(STATUS_CLIENT_APPIMAGE): nim_status_client $(APPIMAGE_TOOL) nim-status.desktop
|
||||||
|
|
||||||
mkdir -p pkg
|
mkdir -p pkg
|
||||||
$(APPIMAGE_TOOL) tmp/linux/dist $(STATUS_CLIENT_APPIMAGE)
|
$(APPIMAGE_TOOL) tmp/linux/dist $(STATUS_CLIENT_APPIMAGE)
|
||||||
|
ifdef IN_NIX_SHELL
|
||||||
|
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 $(STATUS_CLIENT_APPIMAGE)
|
||||||
|
endif
|
||||||
|
|
||||||
# if LINUX_GPG_PRIVATE_KEY_FILE is not set then we don't generate a signature
|
# if LINUX_GPG_PRIVATE_KEY_FILE is not set then we don't generate a signature
|
||||||
ifdef LINUX_GPG_PRIVATE_KEY_FILE
|
ifdef LINUX_GPG_PRIVATE_KEY_FILE
|
||||||
scripts/sign-linux-file.sh $(STATUS_CLIENT_APPIMAGE)
|
scripts/sign-linux-file.sh $(STATUS_CLIENT_APPIMAGE)
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
#!/usr/bin/env groovy
|
||||||
|
library 'status-jenkins-lib@linux-use-nix'
|
||||||
|
|
||||||
|
/* Options section can't access functions in objects. */
|
||||||
|
def isPRBuild = utils.isPRBuild()
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent { label 'linux && x86_64 && nix-2.14' }
|
||||||
|
|
||||||
|
parameters {
|
||||||
|
booleanParam(
|
||||||
|
name: 'RELEASE',
|
||||||
|
description: 'Decides whether release credentials are used.',
|
||||||
|
defaultValue: params.RELEASE ?: false
|
||||||
|
)
|
||||||
|
booleanParam(
|
||||||
|
name: 'INCLUDE_DEBUG_SYMBOLS',
|
||||||
|
description: 'Decides whether binaries are built with debug symbols.',
|
||||||
|
defaultValue: params.INCLUDE_DEBUG_SYMBOLS ?: false
|
||||||
|
)
|
||||||
|
choice(
|
||||||
|
name: 'VERBOSE',
|
||||||
|
description: 'Level of verbosity based on nimbus-build-system setup.',
|
||||||
|
choices: ['0', '1', '2']
|
||||||
|
)
|
||||||
|
string(
|
||||||
|
name: 'NIMFLAGS',
|
||||||
|
description: 'Extra Nim flags. Examples: --verbosity:2 --passL:"-v" --passC:"-v"',
|
||||||
|
defaultValue: '--colors:off'
|
||||||
|
)
|
||||||
|
booleanParam(
|
||||||
|
name: 'USE_MOCKED_KEYCARD_LIB',
|
||||||
|
description: 'Decides whether the mocked status-keycard-go library is built.',
|
||||||
|
defaultValue: false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
timestamps()
|
||||||
|
/* Prevent Jenkins jobs from running forever */
|
||||||
|
timeout(time: 25, unit: 'MINUTES')
|
||||||
|
/* manage how many builds we keep */
|
||||||
|
buildDiscarder(logRotator(
|
||||||
|
numToKeepStr: '10',
|
||||||
|
daysToKeepStr: '30',
|
||||||
|
artifactNumToKeepStr: '1',
|
||||||
|
))
|
||||||
|
/* Allows combined build to copy */
|
||||||
|
copyArtifactPermission('/status-desktop/*')
|
||||||
|
/* Abort old PR builds. */
|
||||||
|
disableConcurrentBuilds(
|
||||||
|
abortPrevious: isPRBuild
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
environment {
|
||||||
|
TARGET = "linux/${getArch()}"
|
||||||
|
/* Improve make performance */
|
||||||
|
MAKEFLAGS = "-j4 V=${params.VERBOSE}"
|
||||||
|
/* Avoid weird bugs caused by stale cache. */
|
||||||
|
QML_DISABLE_DISK_CACHE = "true"
|
||||||
|
/* Control output the filename */
|
||||||
|
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'AppImage', arch: getArch())}"
|
||||||
|
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'tar.gz', arch: getArch())}"
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('Deps') {
|
||||||
|
steps { script {
|
||||||
|
nix.shell('make update --debug V=1', pure: true)
|
||||||
|
nix.shell('make deps --debug V=1', pure: true)
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('status-go') {
|
||||||
|
steps { script {
|
||||||
|
nix.shell('make status-go --debug V=1', pure: true)
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Package') {
|
||||||
|
steps { script {
|
||||||
|
linux.bundle('--debug=b tgz-linux', 1, true)
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Parallel Upload') {
|
||||||
|
parallel {
|
||||||
|
stage('Upload') {
|
||||||
|
steps { script {
|
||||||
|
env.PKG_URL = s3.uploadArtifact(env.STATUS_CLIENT_TARBALL)
|
||||||
|
jenkins.setBuildDesc(AppImage: env.PKG_URL)
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
stage('Archive') {
|
||||||
|
steps { script {
|
||||||
|
archiveArtifacts("${env.STATUS_CLIENT_TARBALL}*")
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
success { script { github.notifyPR(true) } }
|
||||||
|
failure { script { github.notifyPR(false) } }
|
||||||
|
// Windows workspace often becomes broken if stoped during checkout.
|
||||||
|
// Post cleanup will fail too.
|
||||||
|
// Use 'Wipe out repository and force clone' manual UI option to prevent it.
|
||||||
|
cleanup { cleanWs() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def getArch() {
|
||||||
|
def tokens = Thread.currentThread().getName().split('/')
|
||||||
|
for (def arch in ['x86_64', 'aarch64']) {
|
||||||
|
if (tokens.contains(arch)) { return arch }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
# Override some packages and utilities in 'pkgs'
|
||||||
|
# and make them available globally via callPackage.
|
||||||
|
#
|
||||||
|
# For more details see:
|
||||||
|
# - https://nixos.wiki/wiki/Overlays
|
||||||
|
# - https://nixos.org/nixos/nix-pills/callpackage-design-pattern.html
|
||||||
|
|
||||||
|
final: prev: let
|
||||||
|
inherit (prev) callPackage;
|
||||||
|
in rec {
|
||||||
|
linuxdeployqt = callPackage ./pkgs/linuxdeployqt/default.nix { };
|
||||||
|
|
||||||
|
# Copyied from d9424d2191d6439a276b69ae1fd0a800586135ca
|
||||||
|
# 2018-07-27 -> 2020-12-31
|
||||||
|
appimagekit = callPackage ./pkgs/appimagekit/default.nix { };
|
||||||
|
|
||||||
|
# Requirement from Makefile - 3.19
|
||||||
|
cmake_3_19 = prev.cmake.overrideAttrs ( attrs : rec {
|
||||||
|
version = "3.19.7";
|
||||||
|
|
||||||
|
src = prev.fetchurl {
|
||||||
|
url = "${attrs.meta.homepage}files/v${prev.lib.versions.majorMinor version}/cmake-${version}.tar.gz";
|
||||||
|
# compare with https://cmake.org/files/v${lib.versions.majorMinor version}/cmake-${version}-SHA-256.txt
|
||||||
|
sha256 = "sha256-WKFfDVagr8zDzFNxI0/Oc/zGyPnb13XYmOUQuDF1WI4=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
# Copyied from bootstrap121 from 0e2a36815d2310886458ac1aab14350160e6b12a
|
||||||
|
# autoPatchelfHook is disabled
|
||||||
|
# TODO: compile, not binary
|
||||||
|
go_1_20 = callPackage ./pkgs/go/bootstrap120.nix { };
|
||||||
|
|
||||||
|
# Fix for linuxdeployqt so it's not upset shell interpreter from host system
|
||||||
|
lddWrapped = prev.writeShellScriptBin "ldd" ''
|
||||||
|
"${final.bash}/bin/sh" "${final.glibc.bin}/bin/ldd" "$@"
|
||||||
|
'';
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
# This file controls the pinned version of nixpkgs we use for our Nix environment
|
||||||
|
# as well as which versions of package we use, including their overrides.
|
||||||
|
let
|
||||||
|
# For testing local version of nixpkgs
|
||||||
|
#nixpkgsSrc = (import <nixpkgs> { }).lib.cleanSource "/home/jakubgs/work/nixpkgs";
|
||||||
|
|
||||||
|
# We follow the release-20.09 branch of official nixpkgs.
|
||||||
|
nixpkgsSrc = builtins.fetchTarball {
|
||||||
|
url = "https://github.com/NixOS/nixpkgs/archive/66b0db71f463164486a36dded50bedee185e45c2.tar.gz";
|
||||||
|
sha256 = "sha256:0wam1m12qw9rrijhvbvhm5psj2a0ksms77xzxzyr5laz94j60cb0";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Override some packages and utilities
|
||||||
|
pkgsOverlay = import ./overlay.nix;
|
||||||
|
in
|
||||||
|
(import nixpkgsSrc) {
|
||||||
|
overlays = [ pkgsOverlay ];
|
||||||
|
}
|
|
@ -0,0 +1,125 @@
|
||||||
|
{ lib, stdenv, fetchFromGitHub
|
||||||
|
, pkg-config, cmake, autoconf, automake, libtool, makeWrapper
|
||||||
|
, wget, xxd, desktop-file-utils, file
|
||||||
|
, gnupg, glib, zlib, cairo, openssl, fuse, xz, squashfuse, inotify-tools, libarchive
|
||||||
|
, squashfsTools
|
||||||
|
, gtest
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
appimagekit_src = fetchFromGitHub {
|
||||||
|
owner = "AppImage";
|
||||||
|
repo = "AppImageKit";
|
||||||
|
rev = "8bbf694455d00f48d835f56afaa1dabcd9178ba6";
|
||||||
|
sha256 = "sha256-pqg+joomC5CI9WdKP/h/XKPsruMgZEaIOjPLOqnNPZw=";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# squashfuse adapted to nix from cmake experession in "${appimagekit_src}/lib/libappimage/cmake/dependencies.cmake"
|
||||||
|
appimagekit_squashfuse = squashfuse.overrideAttrs (attrs: rec {
|
||||||
|
pname = "squashfuse";
|
||||||
|
version = "unstable-2016-10-09";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "vasi";
|
||||||
|
repo = pname;
|
||||||
|
rev = "1f980303b89c779eabfd0a0fdd36d6a7a311bf92";
|
||||||
|
sha256 = "sha256-BZd1+7sRYZHthULKk3RlgMIy4uCUei45GbSEiZxLPFM=";
|
||||||
|
};
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
"${appimagekit_src}/lib/libappimage/src/patches/squashfuse.patch"
|
||||||
|
"${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.patch"
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
cp -v ${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.[hc] .
|
||||||
|
'';
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
sed -i "/PKG_CHECK_MODULES.*/,/,:./d" configure
|
||||||
|
sed -i "s/typedef off_t sqfs_off_t/typedef int64_t sqfs_off_t/g" common.h
|
||||||
|
'';
|
||||||
|
|
||||||
|
configureFlags = [
|
||||||
|
"--disable-demo" "--disable-high-level" "--without-lzo" "--without-lz4"
|
||||||
|
];
|
||||||
|
|
||||||
|
postConfigure = ''
|
||||||
|
sed -i "s|XZ_LIBS = -llzma |XZ_LIBS = -Bstatic -llzma/|g" Makefile
|
||||||
|
'';
|
||||||
|
|
||||||
|
# only static libs and header files
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/lib $out/include
|
||||||
|
cp -v ./.libs/*.a $out/lib
|
||||||
|
cp -v ./*.h $out/include
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
pname = "appimagekit";
|
||||||
|
version = "unstable-2020-12-31";
|
||||||
|
|
||||||
|
src = appimagekit_src;
|
||||||
|
|
||||||
|
patches = [ ./nix.patch ];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs src/embed-magic-bytes-in-file.sh
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkg-config cmake autoconf automake libtool wget xxd
|
||||||
|
desktop-file-utils makeWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
glib zlib cairo openssl fuse xz inotify-tools
|
||||||
|
libarchive squashfsTools appimagekit_squashfuse
|
||||||
|
];
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
export HOME=$(pwd)
|
||||||
|
'';
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
"-DUSE_SYSTEM_XZ=ON"
|
||||||
|
"-DUSE_SYSTEM_SQUASHFUSE=ON"
|
||||||
|
"-DSQUASHFUSE=${appimagekit_squashfuse}"
|
||||||
|
"-DUSE_SYSTEM_LIBARCHIVE=ON"
|
||||||
|
"-DUSE_SYSTEM_GTEST=ON"
|
||||||
|
"-DUSE_SYSTEM_MKSQUASHFS=ON"
|
||||||
|
];
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
mkdir -p $out/lib/appimagekit
|
||||||
|
cp "${squashfsTools}/bin/mksquashfs" "$out/lib/appimagekit/"
|
||||||
|
cp "${desktop-file-utils}/bin/desktop-file-validate" "$out/bin"
|
||||||
|
|
||||||
|
wrapProgram "$out/bin/appimagetool" \
|
||||||
|
--prefix PATH : "${lib.makeBinPath [ file gnupg ]}" \
|
||||||
|
--unset SOURCE_DATE_EPOCH
|
||||||
|
'';
|
||||||
|
|
||||||
|
checkInputs = [ gtest ];
|
||||||
|
|
||||||
|
# for debugging
|
||||||
|
passthru = {
|
||||||
|
squashfuse = appimagekit_squashfuse;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A tool to package desktop applications as AppImages";
|
||||||
|
longDescription = ''
|
||||||
|
AppImageKit is an implementation of the AppImage format that
|
||||||
|
provides tools such as appimagetool and appimaged for handling
|
||||||
|
AppImages.
|
||||||
|
'';
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [ taeer ];
|
||||||
|
homepage = src.meta.homepage;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
Submodule lib/libappimage contains modified content
|
||||||
|
diff --git a/lib/libappimage/cmake/dependencies.cmake b/lib/libappimage/cmake/dependencies.cmake
|
||||||
|
index 8d96484..c7b17a1 100644
|
||||||
|
--- a/lib/libappimage/cmake/dependencies.cmake
|
||||||
|
+++ b/lib/libappimage/cmake/dependencies.cmake
|
||||||
|
@@ -91,9 +91,18 @@ if(NOT USE_SYSTEM_SQUASHFUSE)
|
||||||
|
INCLUDE_DIRS "<SOURCE_DIR>"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
- message(STATUS "Using system squashfuse")
|
||||||
|
+ message(STATUS "Using system squashfsfuse from ${SQUASHFUSE}")
|
||||||
|
|
||||||
|
- import_pkgconfig_target(TARGET_NAME libsquashfuse PKGCONFIG_TARGET squashfuse)
|
||||||
|
+ add_library(libsquashfuse INTERFACE IMPORTED GLOBAL)
|
||||||
|
+
|
||||||
|
+ set(squashfuse_INCLUDE_DIRS "${SQUASHFUSE}/include")
|
||||||
|
+ set(squashfuse_LIBRARIES "${SQUASHFUSE}/lib/libsquashfuse.a;${SQUASHFUSE}/lib/libsquashfuse_ll.a;${SQUASHFUSE}/lib/libfuseprivate.a")
|
||||||
|
+
|
||||||
|
+ set_property(
|
||||||
|
+ TARGET libsquashfuse
|
||||||
|
+ PROPERTY INTERFACE_LINK_LIBRARIES ${squashfuse_LIBRARIES}
|
||||||
|
+ )
|
||||||
|
+ include_directories(${squashfuse_INCLUDE_DIRS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/appimagetool.c b/src/appimagetool.c
|
||||||
|
index 6b37419..23425e7 100644
|
||||||
|
--- a/src/appimagetool.c
|
||||||
|
+++ b/src/appimagetool.c
|
||||||
|
@@ -38,7 +38,7 @@
|
||||||
|
#include <argp.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
-#include "squashfuse.h"
|
||||||
|
+#include <squashfuse.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
@@ -96,7 +96,7 @@ static void die(const char *msg) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function that prints the contents of a squashfs file
|
||||||
|
-* using libsquashfuse (#include "squashfuse.h") */
|
||||||
|
+* using libsquashfuse (#include <squashfuse.h>) */
|
||||||
|
int sfs_ls(char* image) {
|
||||||
|
sqfs_err err = SQFS_OK;
|
||||||
|
sqfs_traverse trv;
|
||||||
|
diff --git a/src/appimagetoolnoglib.c b/src/appimagetoolnoglib.c
|
||||||
|
index f900e76..ffa87f8 100644
|
||||||
|
--- a/src/appimagetoolnoglib.c
|
||||||
|
+++ b/src/appimagetoolnoglib.c
|
||||||
|
@@ -3,7 +3,7 @@
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
-#include "squashfuse.h"
|
||||||
|
+#include <squashfuse.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
@@ -118,7 +118,7 @@ int is_regular_file(const char *path)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function that prints the contents of a squashfs file
|
||||||
|
- * using libsquashfuse (#include "squashfuse.h") */
|
||||||
|
+ * using libsquashfuse (#include <squashfuse.h>) */
|
||||||
|
int sfs_ls(char* image) {
|
||||||
|
sqfs_err err = SQFS_OK;
|
||||||
|
sqfs_traverse trv;
|
||||||
|
diff --git a/src/runtime.c b/src/runtime.c
|
||||||
|
index bada3af..70a642b 100644
|
||||||
|
--- a/src/runtime.c
|
||||||
|
+++ b/src/runtime.c
|
||||||
|
@@ -29,7 +29,7 @@
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
|
-#include "squashfuse.h"
|
||||||
|
+#include <squashfuse.h>
|
||||||
|
#include <squashfs_fs.h>
|
||||||
|
#include <nonstd.h>
|
|
@ -0,0 +1,40 @@
|
||||||
|
{ lib, stdenv, fetchurl, version, hashes, autoPatchelfHook }:
|
||||||
|
let
|
||||||
|
toGoKernel = platform:
|
||||||
|
if platform.isDarwin then "darwin"
|
||||||
|
else platform.parsed.kernel.name;
|
||||||
|
|
||||||
|
toGoCPU = platform: {
|
||||||
|
"i686" = "386";
|
||||||
|
"x86_64" = "amd64";
|
||||||
|
"aarch64" = "arm64";
|
||||||
|
"armv6l" = "armv6l";
|
||||||
|
"armv7l" = "armv6l";
|
||||||
|
"powerpc64le" = "ppc64le";
|
||||||
|
}.${platform.parsed.cpu.name} or (throw "Unsupported CPU ${platform.parsed.cpu.name}");
|
||||||
|
|
||||||
|
toGoPlatform = platform: "${toGoKernel platform}-${toGoCPU platform}";
|
||||||
|
|
||||||
|
platform = toGoPlatform stdenv.hostPlatform;
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "go-${version}-${platform}-bootstrap";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://go.dev/dl/go${version}.${platform}.tar.gz";
|
||||||
|
sha256 = hashes.${platform} or (throw "Missing Go bootstrap hash for platform ${platform}");
|
||||||
|
};
|
||||||
|
|
||||||
|
#nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
|
||||||
|
|
||||||
|
# We must preserve the signature on Darwin
|
||||||
|
dontStrip = stdenv.hostPlatform.isDarwin;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p $out/share/go $out/bin
|
||||||
|
cp -r . $out/share/go
|
||||||
|
ln -s $out/share/go/bin/go $out/bin/go
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{ callPackage }:
|
||||||
|
callPackage ./binary.nix {
|
||||||
|
version = "1.20.13";
|
||||||
|
hashes = {
|
||||||
|
# Use `print-hashes.sh ${version}` to generate the list below
|
||||||
|
darwin-amd64 = "713051aa0da66839f5a31a8ec677a7c61717b6fba62bf47eadb25542df3e9ee7";
|
||||||
|
darwin-arm64 = "4b7e8d0260b7376c77a0caea7b19dad6e1426c316671a15bc31036f92af2eb12";
|
||||||
|
linux-386 = "4da6f08510a21b829a065d3f99914bfbe1d8b212664cea230485a64e7e6d00d8";
|
||||||
|
linux-amd64 = "9a9d3dcae2b6a638b1f2e9bd4db08ffb39c10e55d9696914002742d90f0047b5";
|
||||||
|
linux-arm64 = "a2d811cef3c4fc77c01195622e637af0c2cf8b3814a95a0920cf2f83b6061d38";
|
||||||
|
linux-armv6l = "d4c6c671423ce6eef3f240bf014115b2673ad6a89e12429b5a331b95952c7279";
|
||||||
|
linux-ppc64le = "5f632b83323e16f8c6ceb676cd570b3f13f1826e06a81d92985d1301b643a7d3";
|
||||||
|
linux-s390x = "ae6c8f75df9b15c92374cfeae86e97d2744d4d4cdafcb999fea5b63e20c22651";
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
stdenv, fetchFromGitHub, qt515
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "linuxdeployqt";
|
||||||
|
version = "20230423-8428c59";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "probonopd";
|
||||||
|
repo = "linuxdeployqt";
|
||||||
|
rev = "8428c59318b250058e6cf93353e2871072bbf7f9";
|
||||||
|
sha256 = "sha256-b1iWpWQRRSjmkNVuWTKRjzxmWGy4czteYNgFWb6Lofs=";
|
||||||
|
};
|
||||||
|
|
||||||
|
dontWrapQtApps = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
qt515.qmake
|
||||||
|
];
|
||||||
|
}
|
96
shell.nix
96
shell.nix
|
@ -1,25 +1,35 @@
|
||||||
{ pkgs ? import (builtins.fetchTarball {
|
{
|
||||||
url = "https://github.com/NixOS/nixpkgs/archive/e7603eba51f2c7820c0a182c6bbb351181caa8e7.zip";
|
pkgs ? import ./nix/pkgs.nix
|
||||||
sha256 = "sha256:0mwck8jyr74wh1b7g6nac1mxy6a0rkppz8n12andsffybsipz5jw";
|
}:
|
||||||
}) { } }:
|
|
||||||
|
|
||||||
let
|
let
|
||||||
qtCustom = with pkgs.qt515;
|
qtCustom = (with pkgs.qt515;
|
||||||
|
# TODO:check the required modules after Qt upgrade
|
||||||
env "qt-custom-${qtbase.version}" ([
|
env "qt-custom-${qtbase.version}" ([
|
||||||
|
qtbase
|
||||||
|
qtdeclarative
|
||||||
|
qtquickcontrols
|
||||||
qtquickcontrols2
|
qtquickcontrols2
|
||||||
|
qtsvg
|
||||||
|
qtmultimedia
|
||||||
|
qtwebview
|
||||||
|
qttools
|
||||||
|
qtwebchannel
|
||||||
qtgraphicaleffects
|
qtgraphicaleffects
|
||||||
qtbase qttools qtdeclarative
|
qtwebengine
|
||||||
qtlottie qtmultimedia
|
qtlocation
|
||||||
qtquickcontrols qtquickcontrols2
|
# qtlottie # TODO: was missing in 5.15.2, review after upgrade
|
||||||
qtsvg qtwebengine qtwebview
|
]));
|
||||||
]);
|
|
||||||
in pkgs.mkShell {
|
in pkgs.mkShell {
|
||||||
name = "status-desktop-build-shell";
|
name = "status-desktop-build-shell";
|
||||||
|
|
||||||
|
# TODO:check the required packages after Qt upgrade
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
qt5Full
|
bash curl wget git file unzip jq lsb-release which cacert gnupg
|
||||||
bash curl wget git file unzip jq lsb-release
|
linuxdeployqt appimagekit
|
||||||
cmake gnumake pkg-config gnugrep qtCustom
|
libglvnd # TODO: Qt 5.15.2 fix, review after upgrade
|
||||||
|
cmake_3_19 gnumake pkg-config gnugrep qtCustom
|
||||||
go_1_21
|
go_1_21
|
||||||
pcre nss pcsclite extra-cmake-modules
|
pcre nss pcsclite extra-cmake-modules
|
||||||
xorg.libxcb xorg.libX11 libxkbcommon
|
xorg.libxcb xorg.libX11 libxkbcommon
|
||||||
|
@ -35,8 +45,66 @@ in pkgs.mkShell {
|
||||||
LANGUAGE = "en_US.UTF-8";
|
LANGUAGE = "en_US.UTF-8";
|
||||||
|
|
||||||
QTDIR = qtCustom;
|
QTDIR = qtCustom;
|
||||||
|
# TODO: still needed?
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/109649
|
||||||
|
QT_INSTALL_PLUGINS = "${qtCustom}/${pkgs.qt515.qtbase.qtPluginPrefix}";
|
||||||
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
export MAKEFLAGS="-j$NIX_BUILD_CORES"
|
export PATH="${pkgs.lddWrapped}/bin:$PATH"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
# Used to workaround missing lib links in qt-custom
|
||||||
|
# TODO:check if it's still needed after Qt upgrade
|
||||||
|
LIBRARY_PATH = with pkgs.qt515; pkgs.lib.makeLibraryPath [
|
||||||
|
qtdeclarative
|
||||||
|
qtmultimedia
|
||||||
|
qtquickcontrols
|
||||||
|
qtquickcontrols2
|
||||||
|
qtsvg
|
||||||
|
qtwebchannel
|
||||||
|
qtwebview
|
||||||
|
];
|
||||||
|
|
||||||
|
# Used for linuxdeployqt
|
||||||
|
# TODO:check if qt modules are still needed here after Qt upgrade
|
||||||
|
LD_LIBRARY_PATH = with pkgs; lib.makeLibraryPath (
|
||||||
|
[
|
||||||
|
alsaLib
|
||||||
|
expat
|
||||||
|
fontconfig
|
||||||
|
freetype
|
||||||
|
gcc-unwrapped
|
||||||
|
glib
|
||||||
|
gmp
|
||||||
|
harfbuzz
|
||||||
|
libglvnd
|
||||||
|
libkrb5
|
||||||
|
libpng
|
||||||
|
libpulseaudio
|
||||||
|
libxkbcommon
|
||||||
|
p11-kit
|
||||||
|
zlib
|
||||||
|
] ++ (with qt515; [
|
||||||
|
qtbase
|
||||||
|
qtdeclarative
|
||||||
|
qtlocation
|
||||||
|
qtmultimedia
|
||||||
|
qtquickcontrols2
|
||||||
|
qtsvg
|
||||||
|
qtwebengine
|
||||||
|
]) ++ (with xorg; [
|
||||||
|
libICE
|
||||||
|
libSM
|
||||||
|
libX11
|
||||||
|
libXrender
|
||||||
|
libxcb
|
||||||
|
xcbutil
|
||||||
|
xcbutilimage
|
||||||
|
xcbutilkeysyms
|
||||||
|
xcbutilrenderutil
|
||||||
|
xcbutilwm
|
||||||
|
]) ++ (with gst_all_1; [
|
||||||
|
gst-plugins-base
|
||||||
|
gstreamer
|
||||||
|
]));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue