pkg.soopen package index

brew / rank 9647

Install unifdef with Homebrew, apk, apt, dnf, MacPorts, Nix, pacman, zypper

Selectively process conditional C preprocessor directives. Version 2.12 via Homebrew; verified from local package data. Also installable with debian: sudo apt install unifdef.

install

Additional install commands

macOS

Homebrewverified · 100%
brew install unifdef

local Homebrew formula metadata

MacPortsverified · 94%
sudo port install unifdef

MacPorts ports tree · devel/unifdef/Portfile · source: api.github.com

Linux

Alpine Linux apkverified · 92%
sudo apk add unifdef

Alpine Linux edge package indexes · unifdef · source: dl-cdn.alpinelinux.org

Debian aptverified · 92%
sudo apt install unifdef

Debian stable package indexes · unifdef · source: deb.debian.org

Fedora dnfverified · 92%
sudo dnf install unifdef

Fedora Rawhide package metadata · unifdef · source: dl.fedoraproject.org

Nixverified · 92%
nix profile install nixpkgs#unifdef

nixpkgs package indexes · pkgs/by-name/un/unifdef/package.nix · source: api.github.com

Arch Linux pacmanverified · 92%
sudo pacman -S unifdef

Arch Linux sync databases · unifdef · source: geo.mirror.pkgbuild.com

openSUSE zypperverified · 92%
sudo zypper install unifdef

openSUSE Tumbleweed package metadata · unifdef · source: download.opensuse.org

overview

Package summary

Selectively process conditional C preprocessor directives

Commands and aliases

  • unifdef
  • unifdefall

history

Project history and usage

unifdef is a source-filtering utility that selectively removes C preprocessor conditionals. The official manual says it processes `#if`, `#ifdef`, `#ifndef`, `#elif`, `#else`, and `#endif` lines when command-line macro definitions are sufficient to decide whether a block should be kept or removed.

Project history

unifdef is much older than its GitHub mirror. The official manual states that the command appeared in 2.9BSD, and that ANSI C support was added in FreeBSD 4.7. It also credits the original implementation to Dave Yost and Tony Finch's rewrite for ANSI C support.

Tony Finch's official project page explains the modern motivation: understanding `xterm`'s heavily conditionalized pty-handling code. That places unifdef in the Unix source-reading and source-cleanup tradition rather than in general-purpose preprocessing.

The current project page publishes release archives, manual documentation, a browsable source repository, and a GitHub collaboration mirror. The GitHub README warns that GitHub release downloads are incomplete and points users back to the official dotat.at release files, which is useful context for packagers.

Adoption history

The official homepage gives a concrete high-profile adoption example: the Linux kernel uses unifdef to strip `#ifdef __KERNEL__` sections from headers exported to userland. It also notes use outside C, including LaTeX workflows.

The supplied package facts show broad distribution packaging across Homebrew, Debian/Ubuntu, Fedora/DNF, Alpine, Arch, MacPorts, Nix, openSUSE, and others. That matches the tool's age and purpose: it is small, portable, and useful in build and source-export pipelines.

How it is used

unifdef is used by specifying macros with `-D`, `-U`, or a definitions file, then filtering input files so known conditional branches are removed while unknown conditionals are preserved. It can operate on stdin/stdout or modify files in place.

The manual also documents `unifdefall`, a script that uses `unifdef -s` and `cpp -dM` to derive macro information and remove all conditional directives from a file. This shows the tool's role as a controlled partial preprocessor rather than a full C preprocessor replacement.

Why package nerds care

unifdef is important in the package-nerd niche because it is both tiny and historically deep: a BSD-era tool still used for practical source filtering. It belongs in base-system and package-manager collections because build scripts and source-export tasks can depend on it without pulling in a large toolchain beyond normal C build support.

Its Linux-kernel header-export use case is exactly the kind of quiet infrastructure job package maintainers care about: remove implementation-only conditional sections, preserve line-oriented source structure, and keep generated user-facing source understandable.

Timeline

  • 2.9BSD: Manual says the `unifdef` command appeared.
  • FreeBSD 4.7: Manual says ANSI C support was added.
  • 2015: Official manual page is dated December 3, 2015.
  • Current project page: Release 2.12 archives are published on dotat.at.
  • Current README: GitHub is maintained as a collaboration mirror, while release downloads remain on dotat.at.

Related projects

  • The manual lists `cpp(1)` and `diff(1)` as related tools.
  • The official page cites Linux kernel header export as a real-world use.
  • The official page also mentions use with LaTeX, showing text-mode uses outside C.

security posture

No protected-tool coverage found yet

No matching local secret-handling manifest was found for unifdef. Nucleus package metadata is still published here so future coverage has a stable package URL.

Install behavior

  • No Homebrew bottle metadata was recorded.

Recommended review

Before unattended agent use, check whether the tool reads plaintext credentials, writes remote state, publishes artifacts, or shells out to plugins.

executables

Installed executables

CommandKindExposureNote
unifdefexecutableindexed executableDiscovered from the local executable index.
unifdefallexecutableindexed executableDiscovered from the local executable index.

freshness

Version and freshness

These signals separate page generation age, package-manager activity, and upstream release comparison. Version lag is warned only when an evidence URL and comparable versions are present.

page generated2026-08-03
manager version2.12
manager updated
local dataunknown
upstreamnot available
latest detectednot detected
  • okNo freshness warnings were generated.

install metadata

Package metadata

Package keybrew:unifdef
Version2.12
Package managerHomebrew
Homepagehttps://dotat.at/prog/unifdef/
Repositoryhttps://github.com/fanf2/unifdef
Bottlenot recorded
Servicenone declared

source database matches

Other package-manager records

Matches are pulled from external package-manager indexes and kept separate from local Automic Vault package links.

Debian apt95%

unifdef 2.12-1

Remove cpp '#ifdef' lines from files

http://dotat.at/prog/unifdef/

sudo apt install unifdef
  • Section: devel
  • Architecture: amd64
  • 2 dependencies
  • normalized package name match
  • Matched by: Unifdef
Debian stable package indexes · deb.debian.org · Debian stable package indexes: unifdef from https://deb.debian.org/debian/dists/stable/main/binary-amd64/Packages.xz
Nix95%

unifdef

nix profile install nixpkgs#unifdef
  • normalized package name match
  • Matched by: Unifdef
nixpkgs package indexes · api.github.com · nixpkgs package indexes: pkgs/by-name/un/unifdef/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1
Ubuntu apt95%

unifdef 2.12-1

Remove cpp '#ifdef' lines from files

http://dotat.at/prog/unifdef/

sudo apt install unifdef
  • Section: universe/devel
  • Architecture: amd64
  • 2 dependencies
  • normalized package name match
  • Matched by: Unifdef
Ubuntu 24.04 LTS package indexes · archive.ubuntu.com · Ubuntu 24.04 LTS package indexes: unifdef from https://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/Packages.gz
apk95%

unifdef 2.12-r4

Selectively remove C preprocessor conditionals

https://github.com/fanf2/unifdef

sudo apk add unifdef
  • License: BSD-2-Clause AND BSD-3-Clause
  • Architecture: x86_64
  • Source Package: unifdef
  • 1 dependencies
  • 1 provides
  • normalized package name match
  • Matched by: Unifdef
Alpine Linux edge package indexes · dl-cdn.alpinelinux.org · Alpine Linux edge package indexes: unifdef from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
apk95%

unifdef-doc 2.12-r4

Selectively remove C preprocessor conditionals (documentation)

https://github.com/fanf2/unifdef

sudo apk add unifdef-doc
  • License: BSD-2-Clause AND BSD-3-Clause
  • Architecture: x86_64
  • Source Package: unifdef
  • normalized package name match
  • Matched by: Unifdef
Alpine Linux edge package indexes · dl-cdn.alpinelinux.org · Alpine Linux edge package indexes: unifdef-doc from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
dnf95%

unifdef 2.12-9.fc45

Selectively remove C preprocessor conditionals

https://dotat.at/prog/unifdef/

sudo dnf install unifdef
  • License: BSD-2-Clause AND BSD-3-Clause
  • Category: Unspecified
  • Architecture: x86_64
  • Source Package: unifdef
  • 3 dependencies
  • 1 provides
  • normalized package name match
  • Matched by: Unifdef
Fedora Rawhide package metadata · dl.fedoraproject.org · Fedora Rawhide package metadata: unifdef from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/07190dc5ae9f35ae73866675fed6d95fe6e8d9fe22c9d7cdf85862cb2ed24a4c-primary.xml.zst
pacman95%

unifdef 2.12-4

Remove #ifdef'ed lines

https://dotat.at/prog/unifdef/

sudo pacman -S unifdef
  • License: GPL
  • Architecture: x86_64
  • normalized package name match
  • Matched by: Unifdef
Arch Linux sync databases · geo.mirror.pkgbuild.com · Arch Linux sync databases: unifdef from https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db.tar.gz
zypper95%

unifdef 2.12-3.5

Removes ifdefs from C files

https://dotat.at/prog/unifdef/

sudo zypper install unifdef
  • License: BSD-2-Clause
  • Category: Development/Libraries/C and C++
  • Architecture: x86_64
  • Source Package: unifdef
  • 2 dependencies
  • 1 provides
  • normalized package name match
  • Matched by: Unifdef
openSUSE Tumbleweed package metadata · download.opensuse.org · openSUSE Tumbleweed package metadata: unifdef from https://download.opensuse.org/tumbleweed/repo/oss/repodata/50b07339cb64c8ed4091bdbabddadc1ff5737b090e478818a195b40d8a3292861a879139b4a3987c31109699fde9fbf4a716367ddf4eef77da75f96e3193d6ed-primary.xml.zst
MacPorts95%

unifdef

sudo port install unifdef
  • normalized package name match
  • Matched by: Unifdef
MacPorts ports tree · api.github.com · MacPorts ports tree: devel/unifdef/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1

source trail

Generated from repository data

This page is generated by av-web from the private package SQLite artifact built by scripts/generate-pkg-sqlite.py.

Used sources

  • cross-ecosystem install command graph
  • curated package history
  • external package-manager database matches
  • pkg.so package database
  • pkgdb category and tag curation