diff --git a/README.md b/README.md index 3f3a3ff..84d19e9 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ | Feature | Description | Install method | Version | | ------- | ----------- | -------------- | ------- | | [alexpasmantier/television](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/alexpasmantier-television) | `tv` — fuzzy finder for files, text, and more | gh release | 1.0.1 | +| [apt-build-essential](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/apt-build-essential) | `gcc`/`g++`/`make` — C/C++ compiler toolchain via the build-essential package | apt | 1.0.0 | | [asdf-vm.com](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/asdf-vm.com) | `asdf` — multi-runtime version manager | gh release | 1.0.2 | | [astral.sh/uv](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/astral.sh-uv) | `uv`/`uvx` — fast Python package and project manager | gh release | 1.0.4 | | [atuin.sh](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/atuin.sh) | `atuin` — shell history sync and search | gh release | 1.0.3 | @@ -20,15 +21,22 @@ | [biomejs.dev](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/biomejs.dev) | `biome` — fast JS/TS formatter and linter | gh release | 1.0.1 | | [btop](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/btop) | `btop` — resource monitor (CPU, memory, network, processes) | gh release | 1.0.3 | | [bun.sh](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/bun.sh) | `bun` — fast JS runtime and package manager | curl | 1.0.0 | +| [ccache.dev](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/ccache.dev) | `ccache` — compiler cache for faster C/C++ recompilation | apt | 1.0.0 | | [charmbracelet/gum](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/charmbracelet-gum) | `gum` — building blocks for shell scripts | gh release | 1.0.4 | | [chezmoi.io](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/chezmoi.io) | `chezmoi` — dotfiles manager across machines | gh release | 1.0.2 | +| [clang-format](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/clang-format) | `clang-format` — C/C++ code formatter from the LLVM project | apt | 1.0.0 | +| [clang-tidy](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/clang-tidy) | `clang-tidy` — C++ linter and static analyzer from LLVM | apt | 1.0.0 | | [cloudflare.com/warp-cli](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/cloudflare.com-warp-cli) | `warp-cli` — Cloudflare WARP VPN client | curl | 1.0.1 | +| [cmake.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/cmake.org) | `cmake` — cross-platform build system generator | apt | 1.0.0 | +| [collection-c-cpp](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/collection-c-cpp) | C/C++ dev collection — cmake, ninja, gdb, valgrind, ccache, cppcheck, clang-format, clang-tidy, distcc, vcpkg, build-essential | meta | 1.0.0 | | [critique.work](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/critique.work) | `critique` — TUI for reviewing git changes | bun | 1.0.0 | +| [danmar/cppcheck](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/danmar-cppcheck) | `cppcheck` — static analysis tool for C/C++ code | apt | 1.0.0 | | [delta](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/delta) | `delta` — syntax-highlighting pager for git diffs | gh release | 1.0.1 | | [deno.com](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/deno.com) | `deno` — secure TypeScript/JavaScript runtime | curl | 1.0.0 | | [devenv.sh](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/devenv.sh) | `devenv` — reproducible developer environments via Nix | nix | 1.0.0 | | [diffity.com](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/diffity.com) | `diffity` — agent-agnostic GitHub-style diff viewer and code review tool | npm | 1.0.0 | | [direnv.net](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/direnv.net) | `direnv` — environment switcher that loads and unloads variables based on the current directory | apt | 1.0.0 | +| [distcc.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/distcc.org) | `distcc` — distributed C/C++ compiler for faster parallel builds | apt | 1.0.0 | | [dolthub.com](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/dolthub.com) | `dolt` — SQL database with Git-style versioning | gh release | 1.0.0 | | [dolthub.com/doltgres](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/dolthub.com-doltgres) | `doltgres` — version-controlled PostgreSQL-compatible database | gh release | 1.0.0 | | [dotenv.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/dotenv.org) | `dotenvx` — better dotenv with multi-environment and encrypted secrets support | bun | 1.0.0 | @@ -53,6 +61,7 @@ | [memvid.com](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/memvid.com) | `memvid` — video-based memory for AI applications | npm | 1.0.0 | | [mosh.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/mosh.org) | `mosh` — SSH replacement with roaming support | apt | 1.0.0 | | [neovim.io](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/neovim.io) | `nvim` — hyperextensible Vim-based text editor | gh release | 1.0.1 | +| [ninja-build.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/ninja-build.org) | `ninja` — small build system with a focus on speed | apt | 1.0.0 | | [nixos.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/nixos.org) | `nix` — the Nix package manager | curl | 1.0.0 | | [nvidia.com/cuda](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/nvidia.com-cuda) | NVIDIA CUDA Toolkit for GPU computing | curl | 1.0.0 | | [onecli.sh/cli](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/onecli.sh-cli) | `onecli` — manage agents, secrets, rules, and configuration from the terminal | gh release | 1.0.1 | @@ -66,6 +75,7 @@ | [schpet/linear-cli](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/schpet-linear-cli) | `linear` — CLI to access linear.com issue tracker | gh release | 1.0.2 | | [smallstep.com](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/smallstep.com) | `step` — zero-trust security toolkit and CA | gh release | 1.0.2 | | [socket.dev/sfw-free](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/socket.dev-sfw-free) | `sfw` — network security proxy that blocks malicious dependencies | gh release | 1.0.0 | +| [sourceware.org/gdb](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/sourceware.org-gdb) | `gdb` — GNU debugger for C/C++ and other languages | apt | 1.0.0 | | [sshd](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/sshd) | `sshd` — OpenSSH server running inside the container | apt | 1.0.0 | | [starship.rs](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/starship.rs) | `starship` — minimal, fast cross-shell prompt | gh release | 1.0.2 | | [steveyegge/beads](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/steveyegge-beads) | `bd` — distributed graph issue tracker for AI agents | gh release | 1.0.0 | @@ -74,6 +84,8 @@ | [tailscale.com](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/tailscale.com) | `tailscale` — zero-config mesh VPN | curl | 1.0.0 | | [taskwarrior.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/taskwarrior.org) | `task` — command-line task manager | apt | 1.0.0 | | [turso.tech](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/turso.tech) | `tursodb` — in-process SQL database compatible with SQLite | gh release | 1.0.0 | +| [valgrind.org](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/valgrind.org) | `valgrind` — memory error detector and profiler for C/C++ | apt | 1.0.0 | +| [vcpkg.io](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/vcpkg.io) | `vcpkg` — C/C++ package manager by Microsoft | git | 1.0.0 | | [webinstall.dev](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/webinstall.dev) | `webi` — install packages without sudo | curl | 1.0.1 | | [yakitrak/notesmd-cli](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/yakitrak-notesmd-cli) | `notesmd-cli` — manage Obsidian vaults from the terminal | gh release | 1.0.0 | | [yq](https://github.com/devcontainer-community/devcontainer-features/tree/main/src/yq) | `yq` — command-line YAML/JSON/XML processor | gh release | 1.0.1 | diff --git a/src/apt-build-essential/NOTES.md b/src/apt-build-essential/NOTES.md new file mode 100644 index 0000000..bb216c8 --- /dev/null +++ b/src/apt-build-essential/NOTES.md @@ -0,0 +1,17 @@ +# apt-build-essential + +## Project + +- [build-essential](https://packages.debian.org/build-essential) + +## Description + +Installs the `build-essential` Debian/Ubuntu meta-package, which brings in `gcc`, `g++`, `make`, and the standard C/C++ header files needed to compile most software from source. + +## Installation Method + +Installed via the system APT package manager (`apt-get install build-essential`). + +## Other Notes + +_No additional notes._ diff --git a/src/apt-build-essential/devcontainer-feature.json b/src/apt-build-essential/devcontainer-feature.json new file mode 100644 index 0000000..527df78 --- /dev/null +++ b/src/apt-build-essential/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "apt-build-essential", + "id": "apt-build-essential", + "version": "1.0.0", + "description": "Install \"build-essential\" apt package (gcc, g++, make)", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/apt-build-essential" +} diff --git a/src/apt-build-essential/install.sh b/src/apt-build-essential/install.sh new file mode 100755 index 0000000..b700d1b --- /dev/null +++ b/src/apt-build-essential/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="build-essential" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall build-essential + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/ccache.dev/NOTES.md b/src/ccache.dev/NOTES.md new file mode 100644 index 0000000..fc87e15 --- /dev/null +++ b/src/ccache.dev/NOTES.md @@ -0,0 +1,17 @@ +# ccache + +## Project + +- [ccache](https://ccache.dev) + +## Description + +A compiler cache that speeds up recompilation of C/C++ code by caching the results of previous compilations. On a cache hit, it can reduce compilation time by an order of magnitude. + +## Installation Method + +Installed via the system APT package manager (`apt-get install ccache`). + +## Other Notes + +_No additional notes._ diff --git a/src/ccache.dev/devcontainer-feature.json b/src/ccache.dev/devcontainer-feature.json new file mode 100644 index 0000000..8021218 --- /dev/null +++ b/src/ccache.dev/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "ccache.dev", + "id": "ccache.dev", + "version": "1.0.0", + "description": "Install \"ccache\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/ccache.dev" +} diff --git a/src/ccache.dev/install.sh b/src/ccache.dev/install.sh new file mode 100755 index 0000000..8aa8e07 --- /dev/null +++ b/src/ccache.dev/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="ccache" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall ccache + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/clang-format/NOTES.md b/src/clang-format/NOTES.md new file mode 100644 index 0000000..4fd7f6b --- /dev/null +++ b/src/clang-format/NOTES.md @@ -0,0 +1,17 @@ +# clang-format + +## Project + +- [clang-format](https://clang.llvm.org/docs/ClangFormat.html) + +## Description + +A tool to automatically format C/C++, Java, JavaScript, JSON, Objective-C, Protobuf, and C# code. It uses a style configuration file (`.clang-format`) to enforce consistent code style across a project. + +## Installation Method + +Installed via the system APT package manager (`apt-get install clang-format`). + +## Other Notes + +_No additional notes._ diff --git a/src/clang-format/devcontainer-feature.json b/src/clang-format/devcontainer-feature.json new file mode 100644 index 0000000..3a089e0 --- /dev/null +++ b/src/clang-format/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "clang-format", + "id": "clang-format", + "version": "1.0.0", + "description": "Install \"clang-format\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/clang-format" +} diff --git a/src/clang-format/install.sh b/src/clang-format/install.sh new file mode 100755 index 0000000..336afcc --- /dev/null +++ b/src/clang-format/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="clang-format" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall clang-format + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/clang-tidy/NOTES.md b/src/clang-tidy/NOTES.md new file mode 100644 index 0000000..6cfddb5 --- /dev/null +++ b/src/clang-tidy/NOTES.md @@ -0,0 +1,17 @@ +# clang-tidy + +## Project + +- [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) + +## Description + +A clang-based C++ linter tool. It provides an extensible framework for diagnosing and fixing typical programming errors, including style violations, interface misuse, and bugs detectable via static analysis. + +## Installation Method + +Installed via the system APT package manager (`apt-get install clang-tidy`). + +## Other Notes + +_No additional notes._ diff --git a/src/clang-tidy/devcontainer-feature.json b/src/clang-tidy/devcontainer-feature.json new file mode 100644 index 0000000..9bda171 --- /dev/null +++ b/src/clang-tidy/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "clang-tidy", + "id": "clang-tidy", + "version": "1.0.0", + "description": "Install \"clang-tidy\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/clang-tidy" +} diff --git a/src/clang-tidy/install.sh b/src/clang-tidy/install.sh new file mode 100755 index 0000000..90ce329 --- /dev/null +++ b/src/clang-tidy/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="clang-tidy" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall clang-tidy + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/cmake.org/NOTES.md b/src/cmake.org/NOTES.md new file mode 100644 index 0000000..b607c69 --- /dev/null +++ b/src/cmake.org/NOTES.md @@ -0,0 +1,17 @@ +# cmake + +## Project + +- [CMake](https://cmake.org) + +## Description + +A cross-platform, open-source build system generator. CMake controls the software compilation process using compiler-independent configuration files, generating native makefiles and workspaces for build environments like Make, Ninja, and IDE projects. + +## Installation Method + +Installed via the system APT package manager (`apt-get install cmake`). + +## Other Notes + +_No additional notes._ diff --git a/src/cmake.org/devcontainer-feature.json b/src/cmake.org/devcontainer-feature.json new file mode 100644 index 0000000..2b1775b --- /dev/null +++ b/src/cmake.org/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "cmake.org", + "id": "cmake.org", + "version": "1.0.0", + "description": "Install \"cmake\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/cmake.org" +} diff --git a/src/cmake.org/install.sh b/src/cmake.org/install.sh new file mode 100755 index 0000000..bac7199 --- /dev/null +++ b/src/cmake.org/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="cmake" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall cmake + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/collection-c-cpp/NOTES.md b/src/collection-c-cpp/NOTES.md new file mode 100644 index 0000000..cbcff86 --- /dev/null +++ b/src/collection-c-cpp/NOTES.md @@ -0,0 +1,17 @@ +# collection-c-cpp + +## Project + +- [devcontainer-community/devcontainer-features](https://github.com/devcontainer-community/devcontainer-features) + +## Description + +A meta-feature that installs a curated set of popular C/C++ development tools in one go. Installing this feature brings in: `cmake`, `ninja`, `gdb`, `valgrind`, `ccache`, `cppcheck`, `clang-format`, `clang-tidy`, `distcc`, `vcpkg`, and `build-essential`. + +## Installation Method + +Meta-feature: installs via dependencies (`dependsOn`) declared in `devcontainer-feature.json`. + +## Other Notes + +_No additional notes._ diff --git a/src/collection-c-cpp/devcontainer-feature.json b/src/collection-c-cpp/devcontainer-feature.json new file mode 100644 index 0000000..48305ed --- /dev/null +++ b/src/collection-c-cpp/devcontainer-feature.json @@ -0,0 +1,20 @@ +{ + "name": "collection-c-cpp", + "id": "collection-c-cpp", + "version": "1.0.0", + "description": "C/C++ dev collection — cmake, ninja, gdb, valgrind, ccache, cppcheck, clang-format, clang-tidy, distcc, vcpkg, build-essential", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/collection-c-cpp", + "dependsOn": { + "ghcr.io/devcontainer-community/features/cmake.org:1": {}, + "ghcr.io/devcontainer-community/features/ninja-build.org:1": {}, + "ghcr.io/devcontainer-community/features/sourceware.org-gdb:1": {}, + "ghcr.io/devcontainer-community/features/valgrind.org:1": {}, + "ghcr.io/devcontainer-community/features/ccache.dev:1": {}, + "ghcr.io/devcontainer-community/features/danmar-cppcheck:1": {}, + "ghcr.io/devcontainer-community/features/clang-format:1": {}, + "ghcr.io/devcontainer-community/features/clang-tidy:1": {}, + "ghcr.io/devcontainer-community/features/distcc.org:1": {}, + "ghcr.io/devcontainer-community/features/vcpkg.io:1": {}, + "ghcr.io/devcontainer-community/features/apt-build-essential:1": {} + } +} diff --git a/src/collection-c-cpp/install.sh b/src/collection-c-cpp/install.sh new file mode 100755 index 0000000..98b7749 --- /dev/null +++ b/src/collection-c-cpp/install.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="c-cpp-dev-collection" +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + echo "This meta-feature installs C/C++ dev tools via its dependencies." + echo "See devcontainer-feature.json 'dependsOn' for the list of included features." +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/danmar-cppcheck/NOTES.md b/src/danmar-cppcheck/NOTES.md new file mode 100644 index 0000000..d95deda --- /dev/null +++ b/src/danmar-cppcheck/NOTES.md @@ -0,0 +1,17 @@ +# cppcheck + +## Project + +- [Cppcheck](https://cppcheck.sourceforge.io) + +## Description + +A static analysis tool for C/C++ code. It detects bugs that compilers normally fail to detect, including undefined behavior, memory leaks, and other common programming errors. + +## Installation Method + +Installed via the system APT package manager (`apt-get install cppcheck`). + +## Other Notes + +_No additional notes._ diff --git a/src/danmar-cppcheck/devcontainer-feature.json b/src/danmar-cppcheck/devcontainer-feature.json new file mode 100644 index 0000000..e226906 --- /dev/null +++ b/src/danmar-cppcheck/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "danmar/cppcheck", + "id": "danmar-cppcheck", + "version": "1.0.0", + "description": "Install \"cppcheck\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/danmar-cppcheck" +} diff --git a/src/danmar-cppcheck/install.sh b/src/danmar-cppcheck/install.sh new file mode 100755 index 0000000..37b1fdf --- /dev/null +++ b/src/danmar-cppcheck/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="cppcheck" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall cppcheck + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/distcc.org/NOTES.md b/src/distcc.org/NOTES.md new file mode 100644 index 0000000..340dbbe --- /dev/null +++ b/src/distcc.org/NOTES.md @@ -0,0 +1,17 @@ +# distcc.org + +## Project + +- [distcc](https://distcc.github.io) + +## Description + +A distributed C/C++ compiler that speeds up compilation by distributing build jobs across multiple machines on a network. distcc runs on the local machine alongside a regular compiler, offloading compilation to remote machines running the `distccd` daemon. + +## Installation Method + +Installed via the system APT package manager (`apt-get install distcc`). + +## Other Notes + +_No additional notes._ diff --git a/src/distcc.org/devcontainer-feature.json b/src/distcc.org/devcontainer-feature.json new file mode 100644 index 0000000..f3b9cd7 --- /dev/null +++ b/src/distcc.org/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "distcc.org", + "id": "distcc.org", + "version": "1.0.0", + "description": "Install \"distcc\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/distcc.org" +} diff --git a/src/distcc.org/install.sh b/src/distcc.org/install.sh new file mode 100755 index 0000000..03c0a65 --- /dev/null +++ b/src/distcc.org/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="distcc" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall distcc + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/ninja-build.org/NOTES.md b/src/ninja-build.org/NOTES.md new file mode 100644 index 0000000..c896023 --- /dev/null +++ b/src/ninja-build.org/NOTES.md @@ -0,0 +1,17 @@ +# ninja + +## Project + +- [Ninja](https://ninja-build.org) + +## Description + +A small build system with a focus on speed. Ninja is designed to run builds as fast as possible, making it a popular choice as a CMake generator target for C/C++ projects. + +## Installation Method + +Installed via the system APT package manager (`apt-get install ninja-build`). + +## Other Notes + +_No additional notes._ diff --git a/src/ninja-build.org/devcontainer-feature.json b/src/ninja-build.org/devcontainer-feature.json new file mode 100644 index 0000000..ad913aa --- /dev/null +++ b/src/ninja-build.org/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "ninja-build.org", + "id": "ninja-build.org", + "version": "1.0.0", + "description": "Install \"ninja\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/ninja-build.org" +} diff --git a/src/ninja-build.org/install.sh b/src/ninja-build.org/install.sh new file mode 100755 index 0000000..b55b0ef --- /dev/null +++ b/src/ninja-build.org/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="ninja" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall ninja-build + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/sourceware.org-gdb/NOTES.md b/src/sourceware.org-gdb/NOTES.md new file mode 100644 index 0000000..84d97cf --- /dev/null +++ b/src/sourceware.org-gdb/NOTES.md @@ -0,0 +1,17 @@ +# gdb + +## Project + +- [GDB](https://www.sourceware.org/gdb/) + +## Description + +The GNU Debugger allows you to see what is going on inside another program while it executes, or what it was doing at the moment it crashed. GDB supports debugging of C, C++, and many other languages. + +## Installation Method + +Installed via the system APT package manager (`apt-get install gdb`). + +## Other Notes + +_No additional notes._ diff --git a/src/sourceware.org-gdb/devcontainer-feature.json b/src/sourceware.org-gdb/devcontainer-feature.json new file mode 100644 index 0000000..fdb1f29 --- /dev/null +++ b/src/sourceware.org-gdb/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "sourceware.org/gdb", + "id": "sourceware.org-gdb", + "version": "1.0.0", + "description": "Install \"gdb\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/sourceware.org-gdb" +} diff --git a/src/sourceware.org-gdb/install.sh b/src/sourceware.org-gdb/install.sh new file mode 100755 index 0000000..9ee8213 --- /dev/null +++ b/src/sourceware.org-gdb/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="gdb" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall gdb + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/valgrind.org/NOTES.md b/src/valgrind.org/NOTES.md new file mode 100644 index 0000000..aee39a8 --- /dev/null +++ b/src/valgrind.org/NOTES.md @@ -0,0 +1,17 @@ +# valgrind + +## Project + +- [Valgrind](https://valgrind.org) + +## Description + +An instrumentation framework for building dynamic analysis tools. Valgrind's most popular tool, Memcheck, detects memory management bugs such as memory leaks, use-after-free, and buffer overflows in C/C++ programs. + +## Installation Method + +Installed via the system APT package manager (`apt-get install valgrind`). + +## Other Notes + +_No additional notes._ diff --git a/src/valgrind.org/devcontainer-feature.json b/src/valgrind.org/devcontainer-feature.json new file mode 100644 index 0000000..255c496 --- /dev/null +++ b/src/valgrind.org/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "valgrind.org", + "id": "valgrind.org", + "version": "1.0.0", + "description": "Install \"valgrind\" binary", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/valgrind.org" +} diff --git a/src/valgrind.org/install.sh b/src/valgrind.org/install.sh new file mode 100755 index 0000000..ec88300 --- /dev/null +++ b/src/valgrind.org/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="valgrind" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall valgrind + apt_get_cleanup +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/src/vcpkg.io/NOTES.md b/src/vcpkg.io/NOTES.md new file mode 100644 index 0000000..16ad3fe --- /dev/null +++ b/src/vcpkg.io/NOTES.md @@ -0,0 +1,17 @@ +# vcpkg.io + +## Project + +- [vcpkg](https://vcpkg.io) + +## Description + +An open-source C/C++ package manager by Microsoft that simplifies acquiring and building open-source libraries. vcpkg integrates with CMake and MSBuild and supports thousands of packages across Windows, Linux, and macOS. + +## Installation Method + +Clones the official [microsoft/vcpkg](https://github.com/microsoft/vcpkg) repository to `/usr/local/share/vcpkg` and runs the `bootstrap-vcpkg.sh` script. The `vcpkg` binary is symlinked to `/usr/local/bin/vcpkg`. + +## Other Notes + +_No additional notes._ diff --git a/src/vcpkg.io/devcontainer-feature.json b/src/vcpkg.io/devcontainer-feature.json new file mode 100644 index 0000000..62018bd --- /dev/null +++ b/src/vcpkg.io/devcontainer-feature.json @@ -0,0 +1,7 @@ +{ + "name": "vcpkg.io", + "id": "vcpkg.io", + "version": "1.0.0", + "description": "Install vcpkg C/C++ package manager", + "documentationURL": "https://github.com/devcontainer-community/devcontainer-features/tree/main/src/vcpkg.io" +} diff --git a/src/vcpkg.io/install.sh b/src/vcpkg.io/install.sh new file mode 100755 index 0000000..8c26f70 --- /dev/null +++ b/src/vcpkg.io/install.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -o errexit +set -o pipefail +set -o noclobber +set -o nounset +set -o allexport +readonly name="vcpkg" +readonly vcpkgRoot="/usr/local/share/vcpkg" +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} +apt_get_checkinstall() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --no-install-suggests --option 'Debug::pkgProblemResolver=true' --option 'Debug::pkgAcquire::Worker=1' "$@" + fi +} +apt_get_cleanup() { + apt-get clean + rm -rf /var/lib/apt/lists/* +} +echo_banner() { + local text="$1" + echo -e "\e[1m\e[97m\e[41m$text\e[0m" +} +install() { + apt_get_checkinstall git curl ca-certificates cmake g++ zip unzip pkg-config + apt_get_cleanup + git clone https://github.com/microsoft/vcpkg "$vcpkgRoot" + "$vcpkgRoot/bootstrap-vcpkg.sh" -disableMetrics + ln -s "$vcpkgRoot/vcpkg" /usr/local/bin/vcpkg +} +echo_banner "devcontainer.community" +echo "Installing $name..." +install "$@" +echo "(*) Done!" diff --git a/test/apt-build-essential/test.sh b/test/apt-build-essential/test.sh new file mode 100755 index 0000000..9255621 --- /dev/null +++ b/test/apt-build-essential/test.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "gcc installed" bash -c "gcc --version | grep 'gcc'" +check "g++ installed" bash -c "g++ --version | grep 'g++'" +check "make installed" bash -c "make --version | grep -i 'make'" + +reportResults diff --git a/test/ccache.dev/test.sh b/test/ccache.dev/test.sh new file mode 100755 index 0000000..fee4c18 --- /dev/null +++ b/test/ccache.dev/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "ccache --version | grep 'ccache'" + +reportResults diff --git a/test/clang-format/test.sh b/test/clang-format/test.sh new file mode 100755 index 0000000..6d0cc1b --- /dev/null +++ b/test/clang-format/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "clang-format --version | grep 'clang-format'" + +reportResults diff --git a/test/clang-tidy/test.sh b/test/clang-tidy/test.sh new file mode 100755 index 0000000..3f62a2f --- /dev/null +++ b/test/clang-tidy/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "clang-tidy --version | grep 'LLVM'" + +reportResults diff --git a/test/cmake.org/test.sh b/test/cmake.org/test.sh new file mode 100755 index 0000000..6d1fd97 --- /dev/null +++ b/test/cmake.org/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "cmake --version | grep 'cmake'" + +reportResults diff --git a/test/collection-c-cpp/test.sh b/test/collection-c-cpp/test.sh new file mode 100755 index 0000000..f7708e0 --- /dev/null +++ b/test/collection-c-cpp/test.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "cmake installed" bash -c "cmake --version | grep 'cmake'" +check "ninja installed" bash -c "ninja --version" +check "gdb installed" bash -c "gdb --version | grep 'GNU'" +check "valgrind installed" bash -c "valgrind --version | grep 'valgrind'" +check "ccache installed" bash -c "ccache --version | grep 'ccache'" +check "cppcheck installed" bash -c "cppcheck --version | grep 'Cppcheck'" +check "clang-format installed" bash -c "clang-format --version | grep 'clang-format'" +check "clang-tidy installed" bash -c "clang-tidy --version | grep 'LLVM'" +check "distcc installed" bash -c "distcc --version | grep 'distcc'" +check "vcpkg installed" bash -c "vcpkg version | grep 'vcpkg'" +check "gcc installed" bash -c "gcc --version | grep 'gcc'" + +reportResults diff --git a/test/danmar-cppcheck/test.sh b/test/danmar-cppcheck/test.sh new file mode 100755 index 0000000..491b0ff --- /dev/null +++ b/test/danmar-cppcheck/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "cppcheck --version | grep 'Cppcheck'" + +reportResults diff --git a/test/distcc.org/test.sh b/test/distcc.org/test.sh new file mode 100755 index 0000000..b8255d5 --- /dev/null +++ b/test/distcc.org/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "distcc --version | grep 'distcc'" + +reportResults diff --git a/test/ninja-build.org/test.sh b/test/ninja-build.org/test.sh new file mode 100755 index 0000000..044fb40 --- /dev/null +++ b/test/ninja-build.org/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "ninja --version" + +reportResults diff --git a/test/sourceware.org-gdb/test.sh b/test/sourceware.org-gdb/test.sh new file mode 100755 index 0000000..4592bc9 --- /dev/null +++ b/test/sourceware.org-gdb/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "gdb --version | grep 'GNU'" + +reportResults diff --git a/test/valgrind.org/test.sh b/test/valgrind.org/test.sh new file mode 100755 index 0000000..5d8e87c --- /dev/null +++ b/test/valgrind.org/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "valgrind --version | grep 'valgrind'" + +reportResults diff --git a/test/vcpkg.io/test.sh b/test/vcpkg.io/test.sh new file mode 100755 index 0000000..b106c55 --- /dev/null +++ b/test/vcpkg.io/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "execute command" bash -c "vcpkg version | grep 'vcpkg'" + +reportResults