-
Notifications
You must be signed in to change notification settings - Fork 12.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
create libcxx-version tool for getting currently used libcxx version
Signed-off-by: onur-ozkan <work@onurozkan.dev>
- Loading branch information
1 parent
b54dd08
commit 3dc4fff
Showing
1 changed file
with
28 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// Detecting the standard library version manually using a bunch of shell commands is very | ||
// complicated and fragile across different platforms. This program provides the major version | ||
// of the standard library on any target platform without requiring any messy work. | ||
// | ||
// It's nothing more than specifying the name of the standard library implementation (either libstdc++ or libc++) | ||
// and its major version. | ||
// | ||
// ignore-tidy-linelength | ||
|
||
#include <iostream> | ||
|
||
int main() { | ||
#ifdef _GLIBCXX_RELEASE | ||
std::cout << "libstdc++ version: " << _GLIBCXX_RELEASE << std::endl; | ||
#elif defined(_LIBCPP_VERSION) | ||
// _LIBCPP_VERSION follows "XXYYZZ" format (e.g., 170001 for 17.0.1). | ||
// ref: https://github.com/llvm/llvm-project/blob/f64732195c1030ee2627ff4e4142038e01df1d26/libcxx/include/__config#L51-L54 | ||
// | ||
// Since we use the major version from _GLIBCXX_RELEASE, we need to extract only the first 2 characters of _LIBCPP_VERSION | ||
// to provide the major version for consistency. | ||
std::cout << "libc++ version: " << std::to_string(_LIBCPP_VERSION).substr(0, 2) << std::endl; | ||
#else | ||
std::cerr << "Coudln't recognize the standard library version." << std::endl; | ||
return 1; | ||
#endif | ||
|
||
return 0; | ||
} |