xref: /aosp_15_r20/external/protobuf/vendor_suffix_test.cpp (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker #include <link.h>
2*1b3f573fSAndroid Build Coastguard Worker 
3*1b3f573fSAndroid Build Coastguard Worker #include <string>
4*1b3f573fSAndroid Build Coastguard Worker #include <vector>
5*1b3f573fSAndroid Build Coastguard Worker 
6*1b3f573fSAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
7*1b3f573fSAndroid Build Coastguard Worker 
8*1b3f573fSAndroid Build Coastguard Worker #include <gtest/gtest.h>
9*1b3f573fSAndroid Build Coastguard Worker 
10*1b3f573fSAndroid Build Coastguard Worker #include <google/protobuf/message_lite.h>
11*1b3f573fSAndroid Build Coastguard Worker 
TEST(vendor_suffix,suffix)12*1b3f573fSAndroid Build Coastguard Worker TEST(vendor_suffix, suffix) {
13*1b3f573fSAndroid Build Coastguard Worker     std::vector<std::string> libs;
14*1b3f573fSAndroid Build Coastguard Worker     dl_iterate_phdr([](dl_phdr_info* info, size_t, void* data) -> int {
15*1b3f573fSAndroid Build Coastguard Worker         auto local_libs = static_cast<decltype(&libs)>(data);
16*1b3f573fSAndroid Build Coastguard Worker         std::string name = info->dlpi_name;
17*1b3f573fSAndroid Build Coastguard Worker         size_t libprotobuf = name.find("libprotobuf-cpp");
18*1b3f573fSAndroid Build Coastguard Worker         if (libprotobuf != name.npos) {
19*1b3f573fSAndroid Build Coastguard Worker             local_libs->push_back(name.substr(libprotobuf, name.size()));
20*1b3f573fSAndroid Build Coastguard Worker         }
21*1b3f573fSAndroid Build Coastguard Worker         return 0;
22*1b3f573fSAndroid Build Coastguard Worker     }, &libs);
23*1b3f573fSAndroid Build Coastguard Worker 
24*1b3f573fSAndroid Build Coastguard Worker     std::sort(libs.begin(), libs.end());
25*1b3f573fSAndroid Build Coastguard Worker 
26*1b3f573fSAndroid Build Coastguard Worker     std::string version = android::base::StringPrintf("-%d.%d",
27*1b3f573fSAndroid Build Coastguard Worker        GOOGLE_PROTOBUF_VERSION / 1000 % 1000,
28*1b3f573fSAndroid Build Coastguard Worker        GOOGLE_PROTOBUF_VERSION % 1000);
29*1b3f573fSAndroid Build Coastguard Worker 
30*1b3f573fSAndroid Build Coastguard Worker     std::string suffix = GOOGLE_PROTOBUF_VERSION_SUFFIX;
31*1b3f573fSAndroid Build Coastguard Worker     if (suffix != "") {
32*1b3f573fSAndroid Build Coastguard Worker         version += "-" + suffix;
33*1b3f573fSAndroid Build Coastguard Worker     }
34*1b3f573fSAndroid Build Coastguard Worker 
35*1b3f573fSAndroid Build Coastguard Worker     std::vector<std::string> expect = {
36*1b3f573fSAndroid Build Coastguard Worker         "libprotobuf-cpp-full" + version + ".so",
37*1b3f573fSAndroid Build Coastguard Worker         "libprotobuf-cpp-lite" + version + ".so",
38*1b3f573fSAndroid Build Coastguard Worker     };
39*1b3f573fSAndroid Build Coastguard Worker 
40*1b3f573fSAndroid Build Coastguard Worker     ASSERT_EQ(expect, libs);
41*1b3f573fSAndroid Build Coastguard Worker }
42