This is an archive of the discontinued LLVM Phabricator instance.

[cmake] Canonicalize CMake booleans to 0/1 for Python interop
ClosedPublic

Authored by mgorny on Jan 4 2017, 7:46 AM.

Details

Summary

Canonicalize all CMake booleans to 0/1 before passing them to lit, to
ensure that the Python side handles all of them consistently
and correctly. 0/1 is a safe choice of values that trigger the same
boolean interpretation in CMake, Python and C++.

Furthermore, using them without quotes improves the chance Python will
explicitly fail when an incorrect value (such as ON/OFF, TRUE/FALSE,
YES/NO) is accidentally passed, rather than silently misinterpreting
the value.

This replaces a lot of different logics spread around lit site files,
attempting to partially reproduce the boolean logic used in CMake
and usually silently failing when an uncommon value was used instead.
In fact, some of them were never working correctly since different
values were assigned in CMake and checked in Python.

The alternative solution could be to create a common parser for CMake
booleans in lit and use it consistently throughout the site files.
However, it does not seem like the best idea to create redundant
implementation of the same logic and have to follow upstream if it ever
is extended to handle more values.

Diff Detail

Event Timeline

mgorny updated this revision to Diff 83055.Jan 4 2017, 7:46 AM
mgorny retitled this revision from to [cmake] Canonicalize CMake booleans to 0/1 for Python interop.
mgorny updated this object.
mgorny added a subscriber: llvm-commits.
Herald added a subscriber: axw. · View Herald Transcript

If this looks good, I'll prepare patches against llvm-config and other LLVM projects.

whitequark accepted this revision.Jan 4 2017, 12:19 PM
whitequark edited edge metadata.

Seems good to me!

This revision is now accepted and ready to land.Jan 4 2017, 12:19 PM
This revision was automatically updated to reflect the committed changes.