Page MenuHomeFreeBSD

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

Authored by arichardson on Dec 22 2020, 3:57 PM.



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

rS FreeBSD src repository - subversion
Lint OK
No Unit Test Coverage
Build Status
Buildable 35972
Build 32861: 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.