Add CMake and cross example

[?]
Mar 22, 2023, 1:18 PM
W2MX3YW4OTK4DNSA4BUULWA3DFWE5E77EFCEPQQFHP7AKZZMZYQAC

Dependencies

Change contents

  • file addition: CMakeLists.txt (----------)
    [2.1]
    cmake_minimum_required(VERSION 3.25)
    project(wttr-delft VERSION 1.0 LANGUAGES C)
    find_package(CURL REQUIRED)
    add_executable(wttr-delft simple.c)
    target_link_libraries(wttr-delft PRIVATE CURL::libcurl)
    install(TARGETS wttr-delft RUNTIME DESTINATION bin)
  • file addition: 04-cmake-and-cross (d--r------)
    [4.2]
  • file addition: wttr-delft.nix (----------)
    [0.311]
    { stdenv
    , cmake
    , curl
    }:
    stdenv.mkDerivation rec {
    # Our package name
    name = "wttr-delft";
    # Where the source code lives
    src = builtins.path { path = ../src; name = name; };
    # Build-time dependencies
    nativeBuildInputs = [
    cmake
    ];
    # Dependencies
    buildInputs = [
    curl.dev
    ];
    }
  • file addition: podman-setup-script.nix (----------)
    [0.311]
    { pkgs }:
    let
    registriesConf = pkgs.writeText "registries.conf" ''
    [registries.search]
    registries = ['docker.io']
    [registries.block]
    registries = []
    '';
    storageConf = pkgs.writeText "storage.conf" ''
    [storage]
    driver = "overlay"
    # rootless_storage_path="$XDG_DATA_HOME/containers/storage"
    '';
    in pkgs.writeShellScript "podman-setup" ''
    # Dont overwrite customised configuration
    if ! test -f ~/.config/containers/policy.json; then
    echo "Installing missing ~/.config/containers/policy.json"
    install -Dm644 ${pkgs.skopeo.src}/default-policy.json ~/.config/containers/policy.json
    fi
    if ! test -f ~/.config/containers/registries.conf; then
    echo "Installing missing ~/.config/containers/registries.conf"
    install -Dm644 ${registriesConf} ~/.config/containers/registries.conf
    fi
    if ! test -f ~/.config/containers/storage.conf; then
    echo "Installing missing ~/.config/containers/storage.conf"
    install -Dm644 ${storageConf} ~/.config/containers/storage.conf
    fi
    if ! grep -q "^''${USER}:" /etc/subuid; then
    echo "No subuid range defined for user, consider running 'sudo usermod --add-subuids 10000-75535 ''${USER}' to allow rootless podman to work"
    fi
    ''
  • file addition: flake.nix (----------)
    [0.311]
    # This is a Nix flake
    # It is written in the Nix expression language
    {
    description = "Simple flake for simple libcurl example";
    # nixpkgs is the package repository for the Nix package manager
    inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:NixOS/nixpkgs";
    };
    outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
    let
    # In this simple example we choose to build for "x86_64-linux" only
    pkgs = import nixpkgs {
    inherit system;
    overlays = [
    (final: prev: {
    wttr-delft = prev.callPackage ./wttr-delft.nix {};
    })
    ];
    };
    # Docker image containing only wttr-delft
    wttr-delft-container = pkgs.dockerTools.buildLayeredImage {
    name = "wttr-delft";
    tag = "nix";
    # created = "now";
    contents = [
    pkgs.wttr-delft
    ];
    config = {
    Cmd = [
    "${pkgs.wttr-delft}/bin/wttr-delft"
    ];
    # Needed for curl to work
    Env = [
    "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
    ];
    };
    };
    # Development shell for interacting with containers
    # Based on https://gist.github.com/adisbladis/187204cb772800489ee3dac4acdd9947
    podman-devshell = let
    # Provides a script that copies/creates files that are required for rootless podman
    podmanSetupScript = import ./podman-setup-script.nix { inherit pkgs; };
    # Provides a fake "docker" binary mapping to podman
    dockerCompat = pkgs.runCommandNoCC "docker-podman-compat" {} ''
    mkdir -p $out/bin
    ln -s ${pkgs.podman}/bin/podman $out/bin/docker
    '';
    in pkgs.mkShell {
    name = "podman";
    buildInputs = with pkgs; [
    podman # Manage pods, containers and images
    runc # Container runtime
    conmon # Container runtime monitor
    skopeo # Interact with container registry
    slirp4netns # User-mode networking for unprivileged namespaces
    fuse-overlayfs # CoW for images, much faster than default vfs
    dockerCompat # Aliases for docker / podman
    ];
    shellHook = ''
    # Install configuration required for rootless podman
    ${podmanSetupScript}
    '';
    };
    in
    # These are the flake outputs, i.e. what we can consume
    {
    packages = {
    default = pkgs.wttr-delft;
    # static = pkgs.pkgsCross.musl64.pkgsStatic.wttr-delft;
    container = wttr-delft-container;
    };
    devShells = {
    default = pkgs.wttr-delft;
    podman = podman-devshell;
    };
    }
    );
    }
  • file addition: flake.lock (----------)
    [0.311]
    {
    "nodes": {
    "flake-utils": {
    "locked": {
    "lastModified": 1678901627,
    "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
    "owner": "numtide",
    "repo": "flake-utils",
    "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
    "type": "github"
    },
    "original": {
    "owner": "numtide",
    "repo": "flake-utils",
    "type": "github"
    }
    },
    "nixpkgs": {
    "locked": {
    "lastModified": 1679396235,
    "narHash": "sha256-RjmNVFuZQ2e6u35B98JcY9IzVDtZb3d4QcbtfLtNWkE=",
    "owner": "NixOS",
    "repo": "nixpkgs",
    "rev": "008ce261a7e3c532e792cb8e39482f2cc1b192f5",
    "type": "github"
    },
    "original": {
    "owner": "NixOS",
    "repo": "nixpkgs",
    "type": "github"
    }
    },
    "root": {
    "inputs": {
    "flake-utils": "flake-utils",
    "nixpkgs": "nixpkgs"
    }
    }
    },
    "root": "root",
    "version": 7
    }