Page MenuHomeFreeBSD

include: Use printf(1) instead of shell loops for header symlinks
ClosedPublic

Authored by arichardson on Dec 22 2020, 3:57 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, Oct 19, 10:21 PM
Unknown Object (File)
Sat, Oct 18, 10:08 PM
Unknown Object (File)
Sat, Oct 18, 7:22 PM
Unknown Object (File)
Sat, Oct 18, 11:10 AM
Unknown Object (File)
Fri, Oct 10, 2:23 AM
Unknown Object (File)
Sun, Oct 5, 4:10 AM
Unknown Object (File)
Sep 10 2025, 5:10 PM
Unknown Object (File)
Sep 10 2025, 3:02 PM
Subscribers
None

Details

Summary

Using a shell for loop means we have to spawn a separate install(1)
process for each header that is symlinked. This patch uses printf(1) to
generate an argument list that has been prefixed with the correct number
of ../ and then uses a single install(1) invocation.

This reduces the number of execve() calls during make includes from 2442
(with D27622) to 1382. Running make symlinks in include/ now spawns 214
processes instead of 1276 without this patch.

Test Plan

find ${WORLDTMP}/usr/include -xtype l only prints sys/nvpair.h but that was already broken before due to the openenzfs typo introduced in rS364746. I'll commit a fix for the typo once git is writable.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 35617
Build 32516: arc lint + arc unit

Event Timeline

arichardson created this revision.

printf(1) reusing the format string is a cute trick, I hadn't realized it did that.

This revision is now accepted and ready to land.Dec 30 2020, 9:31 PM
This revision now requires review to proceed.Jan 6 2021, 5:46 PM
This revision was not accepted when it landed; it landed in state Needs Review.Jan 7 2021, 11:08 AM
This revision was automatically updated to reflect the committed changes.