# Installer unifdef avec Homebrew, apk, apt, dnf, MacPorts, Nix, pacman, zypper

Consultez les chemins d'installation, exécutables, métadonnées et notes de sécurité de unifdef pour les workflows d'agents IA.

## installation

```sh
sudo av install brew:unifdef
```

Commandes d'installation supplémentaires:

### macOS

- Homebrew (100%):

```sh
brew install unifdef
```

  Preuve: local Homebrew formula metadata

- MacPorts (94%):

```sh
sudo port install unifdef
```

  Preuve: MacPorts ports tree: devel/unifdef/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1

### Linux

- apk (92%):

```sh
sudo apk add unifdef
```

  Preuve: Alpine Linux edge package indexes: unifdef from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz

- Debian apt (92%):

```sh
sudo apt install unifdef
```

  Preuve: Debian stable package indexes: unifdef from https://deb.debian.org/debian/dists/stable/main/binary-amd64/Packages.xz

- dnf (92%):

```sh
sudo dnf install unifdef
```

  Preuve: Fedora Rawhide package metadata: unifdef from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/07190dc5ae9f35ae73866675fed6d95fe6e8d9fe22c9d7cdf85862cb2ed24a4c-primary.xml.zst

- Nix (92%):

```sh
nix profile install nixpkgs#unifdef
```

  Preuve: nixpkgs package indexes: pkgs/by-name/un/unifdef/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1

- pacman (92%):

```sh
sudo pacman -S unifdef
```

  Preuve: Arch Linux sync databases: unifdef from https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db.tar.gz

- zypper (92%):

```sh
sudo zypper install unifdef
```

  Preuve: openSUSE Tumbleweed package metadata: unifdef from https://download.opensuse.org/tumbleweed/repo/oss/repodata/50b07339cb64c8ed4091bdbabddadc1ff5737b090e478818a195b40d8a3292861a879139b4a3987c31109699fde9fbf4a716367ddf4eef77da75f96e3193d6ed-primary.xml.zst

## Faits du paquet

- **Clé du paquet:** brew:unifdef
- **Gestionnaire de paquets:** Homebrew
- **Version:** 2.12
- **Résumé source:** Selectively process conditional C preprocessor directives
- **Page d'accueil:** <https://dotat.at/prog/unifdef/>
- **Dépôt:** <https://github.com/fanf2/unifdef>
- **Généré:** 2026-08-03T19:37:03+00:00

## exécutables

- unifdef (alias)
- unifdefall (alias)

## Comportement d'installation

- Bouteille: non disponible

## Version et fraîcheur

- page générée: 2026-08-03
- version du gestionnaire: 2.12
## Historique du projet et usages

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.

### Historique du projet

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.

### Historique d'adoption

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.

### Modes d'utilisation

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.

### Pourquoi les passionnés de paquets s'y intéressent

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.

### Chronologie

- 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.

### Sources

- <https://dotat.at/prog/unifdef/>
- <https://dotat.at/prog/unifdef/unifdef.txt>
- <https://github.com/fanf2/unifdef#readme>
- input.source_facts.package-manager


## Notes de sécurité

Aucun manifest local de gestion des secrets correspondant n'a été trouvé pour unifdef. Les métadonnées de paquet Nucleus restent publiées ici afin que la couverture future dispose d'une URL stable.


## Autres enregistrements de gestionnaires de paquets

- Debian apt - unifdef - 2.12-1: normalized package name match | Debian stable package indexes: unifdef from https://deb.debian.org/debian/dists/stable/main/binary-amd64/Packages.xz | Remove cpp '#ifdef' lines from files | http://dotat.at/prog/unifdef/
- Nix - unifdef: normalized package name match | nixpkgs package indexes: pkgs/by-name/un/unifdef/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1
- Ubuntu apt - unifdef - 2.12-1: normalized package name match | Ubuntu 24.04 LTS package indexes: unifdef from https://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/Packages.gz | Remove cpp '#ifdef' lines from files | http://dotat.at/prog/unifdef/
- apk - unifdef - 2.12-r4: normalized package name match | Alpine Linux edge package indexes: unifdef from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | Selectively remove C preprocessor conditionals | https://github.com/fanf2/unifdef
- apk - unifdef-doc - 2.12-r4: normalized package name match | Alpine Linux edge package indexes: unifdef-doc from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | Selectively remove C preprocessor conditionals (documentation) | https://github.com/fanf2/unifdef
- dnf - unifdef - 2.12-9.fc45: normalized package name match | Fedora Rawhide package metadata: unifdef from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/07190dc5ae9f35ae73866675fed6d95fe6e8d9fe22c9d7cdf85862cb2ed24a4c-primary.xml.zst | Selectively remove C preprocessor conditionals | https://dotat.at/prog/unifdef/
- pacman - unifdef - 2.12-4: normalized package name match | Arch Linux sync databases: unifdef from https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db.tar.gz | Remove #ifdef'ed lines | https://dotat.at/prog/unifdef/
- zypper - unifdef - 2.12-3.5: normalized package name match | openSUSE Tumbleweed package metadata: unifdef from https://download.opensuse.org/tumbleweed/repo/oss/repodata/50b07339cb64c8ed4091bdbabddadc1ff5737b090e478818a195b40d8a3292861a879139b4a3987c31109699fde9fbf4a716367ddf4eef77da75f96e3193d6ed-primary.xml.zst | Removes ifdefs from C files | https://dotat.at/prog/unifdef/
- MacPorts - unifdef: normalized package name match | MacPorts ports tree: devel/unifdef/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1


## Combined YAML source

View the package source record on GitHub. [combined/unifdef.yml](https://github.com/mxcl/pkgdb/blob/main/combined/unifdef.yml)


## Sources

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