diff --git a/bin/system-info.c b/bin/system-info.c index 0127ad20a41cbdb786abecf94d2756e68b75e071..e4a7bce3316bbd5be3b5baa781e46bdf4bd0cf08 100644 --- a/bin/system-info.c +++ b/bin/system-info.c @@ -388,12 +388,17 @@ print_libraries_details (JsonBuilder *builder, json_builder_begin_object (builder); for (GList *l = libraries; l != NULL; l = l->next) { - if (verbose || srt_library_get_issues (l->data) != SRT_LIBRARY_ISSUES_NONE) + const char *name = srt_library_get_requested_name (l->data); + const char *soname = srt_library_get_real_soname (l->data); + + if (verbose || + srt_library_get_issues (l->data) != SRT_LIBRARY_ISSUES_NONE || + g_strcmp0 (name, soname) != 0) { const char *messages; const char * const *missing_symbols; const char * const *misversioned_symbols; - json_builder_set_member_name (builder, srt_library_get_soname (l->data)); + json_builder_set_member_name (builder, name); json_builder_begin_object (builder); messages = srt_library_get_messages (l->data); @@ -404,6 +409,9 @@ print_libraries_details (JsonBuilder *builder, json_builder_add_string_value (builder, messages); } + json_builder_set_member_name (builder, "soname"); + json_builder_add_string_value (builder, soname); + json_builder_set_member_name (builder, "path"); json_builder_add_string_value (builder, srt_library_get_absolute_path (l->data)); diff --git a/bin/system-info.md b/bin/system-info.md index b921f4b18df9d55562ef4d8b21b43f939b2a792e..b71411d93b9ca55ead3cbe8225d69b754b5b70fb 100644 --- a/bin/system-info.md +++ b/bin/system-info.md @@ -376,6 +376,11 @@ keys: **path** : The absolute path to the library. + **soname** + : The real SONAME of the library, which might be different from + the name that was requested if it is a compatibility alias, + or **null** if it could not be determined. + **issues** : Problems with the library, as arrays of the same strings described in **library-issues-summary** above. diff --git a/steam-runtime-tools/library-internal.h b/steam-runtime-tools/library-internal.h index aff1658ec9232182706332aec5ece5b2ed2a5fe1..218d741e8b393908cd242c97158536dcfa11f3a9 100644 --- a/steam-runtime-tools/library-internal.h +++ b/steam-runtime-tools/library-internal.h @@ -34,17 +34,17 @@ * _srt_library_new: * @multiarch_tuple: A multiarch tuple like %SRT_ABI_I386, * representing an ABI - * @absolute_path: (nullable) Absolute path of @soname - * @soname: A SONAME like libz.so.1 + * @absolute_path: (nullable) Absolute path of @requested_name + * @requested_name: A SONAME like libz.so.1 * @issues: Problems found when loading a @multiarch_tuple copy - * of @soname + * of @requested_name * @missing_symbols: (nullable) (array zero-terminated=1) (element-type utf8): - * Symbols we expected to find in @soname but did not + * Symbols we expected to find in @requested_name but did not * @misversioned_symbols: (nullable) (array zero-terminated=1) (element-type utf8): - * Symbols we expected to find in @soname but were available with a different - * version + * Symbols we expected to find in @requested_name but were available with a + * different version * @dependencies: (nullable) (array zero-terminated=1) (element-type utf8): - * Dependencies of @soname + * Dependencies of @requested_name * @exit_status: exit status of helper, or -1 if it did not exit normally * @terminating_signal: signal that terminated the helper, or 0 * @@ -55,12 +55,13 @@ */ static inline SrtLibrary *_srt_library_new (const char *multiarch_tuple, const char *absolute_path, - const char *soname, + const char *requested_name, SrtLibraryIssues issues, const char *messages, const char * const *missing_symbols, const char * const *misversioned_symbols, const char * const *dependencies, + const char *real_soname, int exit_status, int terminating_signal); @@ -68,17 +69,18 @@ static inline SrtLibrary *_srt_library_new (const char *multiarch_tuple, static inline SrtLibrary * _srt_library_new (const char *multiarch_tuple, const char *absolute_path, - const char *soname, + const char *requested_name, SrtLibraryIssues issues, const char *messages, const char * const *missing_symbols, const char * const *misversioned_symbols, const char * const *dependencies, + const char *real_soname, int exit_status, int terminating_signal) { g_return_val_if_fail (multiarch_tuple != NULL, NULL); - g_return_val_if_fail (soname != NULL, NULL); + g_return_val_if_fail (requested_name != NULL, NULL); return g_object_new (SRT_TYPE_LIBRARY, "absolute-path", absolute_path, "dependencies", dependencies, @@ -86,9 +88,10 @@ _srt_library_new (const char *multiarch_tuple, "messages", messages, "missing-symbols", missing_symbols, "multiarch-tuple", multiarch_tuple, - "soname", soname, "misversioned-symbols", misversioned_symbols, "exit-status", exit_status, + "real-soname", real_soname, + "requested-name", requested_name, "terminating-signal", terminating_signal, NULL); } @@ -96,7 +99,7 @@ _srt_library_new (const char *multiarch_tuple, G_GNUC_INTERNAL SrtLibraryIssues _srt_check_library_presence (const char *helpers_path, - const char *soname, + const char *requested_name, const char *multiarch, const char *symbols_path, const char * const *hidden_deps, diff --git a/steam-runtime-tools/library.c b/steam-runtime-tools/library.c index ebbdfd014d2bdd1830c45b9a30f42b23ad14c028..8a522713e939220c825d19f62da32431218a7e76 100644 --- a/steam-runtime-tools/library.c +++ b/steam-runtime-tools/library.c @@ -51,7 +51,7 @@ struct _SrtLibrary GObject parent; gchar *absolute_path; gchar *messages; - gchar *soname; + gchar *requested_name; GStrv dependencies; GStrv missing_symbols; GStrv misversioned_symbols; @@ -59,6 +59,7 @@ struct _SrtLibrary SrtLibraryIssues issues; int exit_status; int terminating_signal; + gchar *real_soname; }; struct _SrtLibraryClass @@ -66,7 +67,6 @@ struct _SrtLibraryClass /*< private >*/ GObjectClass parent_class; }; - enum { PROP_0, PROP_ABSOLUTE_PATH, @@ -76,6 +76,8 @@ enum { PROP_MISSING_SYMBOLS, PROP_MULTIARCH_TUPLE, PROP_SONAME, + PROP_REAL_SONAME, + PROP_REQUESTED_NAME, PROP_MISVERSIONED_SYMBOLS, PROP_EXIT_STATUS, PROP_TERMINATING_SIGNAL, @@ -123,8 +125,13 @@ srt_library_get_property (GObject *object, g_value_set_static_string (value, g_quark_to_string (self->multiarch_tuple)); break; - case PROP_SONAME: - g_value_set_string (value, self->soname); + case PROP_REAL_SONAME: + g_value_set_string (value, self->real_soname); + break; + + case PROP_REQUESTED_NAME: + case PROP_SONAME: /* deprecated alias */ + g_value_set_string (value, self->requested_name); break; case PROP_MISVERSIONED_SYMBOLS: @@ -208,10 +215,25 @@ srt_library_set_property (GObject *object, self->multiarch_tuple = g_quark_from_string (g_value_get_string (value)); break; - case PROP_SONAME: + case PROP_REQUESTED_NAME: + case PROP_SONAME: /* deprecated alias */ + tmp = g_value_get_string (value); + + /* We have to ignore NULL, because the deprecated soname + * property will be explicitly set to NULL during construction, + * even if the non-deprecated requested-name property is also set. */ + if (tmp != NULL) + { + /* Construct-only, mutually exclusive */ + g_return_if_fail (self->requested_name == NULL); + self->requested_name = g_strdup (tmp); + } + break; + + case PROP_REAL_SONAME: /* Construct-only */ - g_return_if_fail (self->soname == NULL); - self->soname = g_value_dup_string (value); + g_return_if_fail (self->real_soname == NULL); + self->real_soname = g_value_dup_string (value); break; case PROP_MISVERSIONED_SYMBOLS: @@ -245,7 +267,8 @@ srt_library_finalize (GObject *object) g_free (self->absolute_path); g_free (self->messages); - g_free (self->soname); + g_free (self->requested_name); + g_free (self->real_soname); g_strfreev (self->dependencies); g_strfreev (self->missing_symbols); g_strfreev (self->misversioned_symbols); @@ -304,9 +327,21 @@ srt_library_class_init (SrtLibraryClass *cls) NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + properties[PROP_REQUESTED_NAME] = + g_param_spec_string ("requested-name", "Requested name", + "The name that was loaded, for example libz.so.1", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); properties[PROP_SONAME] = - g_param_spec_string ("soname", "SONAME", - "The name of this library, for example libz.so.1", + g_param_spec_string ("soname", "Requested SONAME", + "Deprecated alias for requested-name", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED); + properties[PROP_REAL_SONAME] = + g_param_spec_string ("real-soname", "Real SONAME", + "ELF DT_SONAME found when loading the library", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); @@ -370,20 +405,55 @@ srt_library_get_messages (SrtLibrary *self) return self->messages; } +/** + * srt_library_get_requested_name: + * @self: a library + * + * Return the name that was requested to be loaded when checking @self. + * + * Returns: A string like `libz.so.1`, which is valid as long as @self + * is not destroyed. + */ +const char * +srt_library_get_requested_name (SrtLibrary *self) +{ + g_return_val_if_fail (SRT_IS_LIBRARY (self), NULL); + return self->requested_name; +} + /** * srt_library_get_soname: * @self: a library * - * Return the SONAME (machine-readable runtime name) of @self. + * Deprecated alias for srt_library_get_requested_name(). + * See also srt_library_get_real_soname(), which might be what you + * thought this did. * * Returns: A string like `libz.so.1`, which is valid as long as @self * is not destroyed. */ const char * srt_library_get_soname (SrtLibrary *self) +{ + return srt_library_get_requested_name (self); +} + +/** + * srt_library_get_real_soname: + * @self: a library + * + * Return the ELF `DT_SONAME` found by parsing the loaded library. + * This is often the same as srt_library_get_requested_name(), + * but can differ when compatibility aliases are involved. + * + * Returns: A string like `libz.so.1`, which is valid as long as @self + * is not destroyed, or %NULL if the SONAME could not be determined. + */ +const char * +srt_library_get_real_soname (SrtLibrary *self) { g_return_val_if_fail (SRT_IS_LIBRARY (self), NULL); - return self->soname; + return self->real_soname; } /** @@ -509,18 +579,19 @@ srt_library_get_misversioned_symbols (SrtLibrary *self) /** * srt_check_library_presence: - * @soname: (type filename): The `SONAME` of a shared library, for example `libjpeg.so.62` + * @requested_name: (type filename): The `SONAME` or absolute or relative + * path of a shared library, for example `libjpeg.so.62` * @multiarch: A multiarch tuple like %SRT_ABI_I386, representing an ABI. * @symbols_path: (nullable) (type filename): The filename of a file listing * symbols, or %NULL if we do not know which symbols the library is meant to * contain. * @symbols_format: The format of @symbols_path. * @more_details_out: (out) (optional) (transfer full): Used to return an - * #SrtLibrary object representing the shared library provided by @soname. - * Free with `g_object_unref()`. + * #SrtLibrary object representing the shared library provided + * by @requested_name. Free with `g_object_unref()`. * - * Attempt to load @soname into a helper subprocess, and check whether it conforms - * to the ABI provided in `symbols_path`. + * Attempt to load @requested_name into a helper subprocess, and check whether + * it conforms to the ABI provided in `symbols_path`. * * If @symbols_format is %SRT_LIBRARY_SYMBOLS_FORMAT_PLAIN, @symbols_path must * list one symbol per line, in the format `jpeg_input_complete@LIBJPEG_6.2` @@ -529,26 +600,26 @@ srt_library_get_misversioned_symbols (SrtLibrary *self) * * If @symbols_format is %SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS, @symbols_path * must be in deb-symbols(5) format. It may list symbols for more SONAMEs than - * just @soname; if so, they are ignored. + * just @requested_name; if so, they are ignored. * * Returns: A bitfield containing problems, or %SRT_LIBRARY_ISSUES_NONE * if no problems were found. */ SrtLibraryIssues -srt_check_library_presence (const char *soname, +srt_check_library_presence (const char *requested_name, const char *multiarch, const char *symbols_path, SrtLibrarySymbolsFormat symbols_format, SrtLibrary **more_details_out) { - return _srt_check_library_presence (NULL, soname, multiarch, + return _srt_check_library_presence (NULL, requested_name, multiarch, symbols_path, NULL, NULL, symbols_format, more_details_out); } SrtLibraryIssues _srt_check_library_presence (const char *helpers_path, - const char *soname, + const char *requested_name, const char *multiarch, const char *symbols_path, const char * const *hidden_deps, @@ -560,6 +631,7 @@ _srt_check_library_presence (const char *helpers_path, gchar *output = NULL; gchar *child_stderr = NULL; gchar *absolute_path = NULL; + gchar *real_soname = NULL; int wait_status = -1; int exit_status = -1; int terminating_signal = 0; @@ -580,7 +652,7 @@ _srt_check_library_presence (const char *helpers_path, SrtHelperFlags flags = SRT_HELPER_FLAGS_TIME_OUT; GString *log_args = NULL; - g_return_val_if_fail (soname != NULL, SRT_LIBRARY_ISSUES_UNKNOWN); + g_return_val_if_fail (requested_name != NULL, SRT_LIBRARY_ISSUES_UNKNOWN); g_return_val_if_fail (multiarch != NULL, SRT_LIBRARY_ISSUES_UNKNOWN); g_return_val_if_fail (more_details_out == NULL || *more_details_out == NULL, SRT_LIBRARY_ISSUES_UNKNOWN); @@ -612,19 +684,20 @@ _srt_check_library_presence (const char *helpers_path, g_string_append (log_args, g_ptr_array_index (argv, i)); } - g_debug ("Checking library %s integrity with %s ", soname, log_args->str); + g_debug ("Checking library %s integrity with %s ", requested_name, + log_args->str); g_string_free (log_args, TRUE); switch (symbols_format) { case SRT_LIBRARY_SYMBOLS_FORMAT_PLAIN: - g_ptr_array_add (argv, g_strdup (soname)); + g_ptr_array_add (argv, g_strdup (requested_name)); g_ptr_array_add (argv, g_strdup (symbols_path)); break; case SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS: g_ptr_array_add (argv, g_strdup ("--deb-symbols")); - g_ptr_array_add (argv, g_strdup (soname)); + g_ptr_array_add (argv, g_strdup (requested_name)); g_ptr_array_add (argv, g_strdup (symbols_path)); break; @@ -697,16 +770,20 @@ _srt_check_library_presence (const char *helpers_path, node = json_parser_get_root (parser); json = json_node_get_object (node); - if (!json_object_has_member (json, soname)) + if (!json_object_has_member (json, requested_name)) { - g_debug ("The helper output is missing the expected soname %s", soname); + g_debug ("The helper output is missing the expected SONAME %s", + requested_name); issues |= SRT_LIBRARY_ISSUES_CANNOT_LOAD; goto out; } - json = json_object_get_object_member (json, soname); + json = json_object_get_object_member (json, requested_name); absolute_path = g_strdup (json_object_get_string_member (json, "path")); + if (json_object_has_member (json, "SONAME")) + real_soname = g_strdup (json_object_get_string_member (json, "SONAME")); + if (json_object_has_member (json, "missing_symbols")) missing_array = json_object_get_array_member (json, "missing_symbols"); if (missing_array != NULL) @@ -755,12 +832,13 @@ out: if (more_details_out != NULL) *more_details_out = _srt_library_new (multiarch, absolute_path, - soname, + requested_name, issues, child_stderr, (const char **) missing_symbols, (const char **) misversioned_symbols, (const char **) dependencies, + real_soname, exit_status, terminating_signal); @@ -775,6 +853,7 @@ out: g_free (absolute_path); g_free (child_stderr); g_free (output); + g_free (real_soname); g_free (filtered_preload); g_clear_error (&error); return issues; diff --git a/steam-runtime-tools/library.h b/steam-runtime-tools/library.h index a4f727f9987709b0c4cc41ec06863766b19882cc..0c01230e16e7dd6b70fd4b255cc22e969f6e6f3f 100644 --- a/steam-runtime-tools/library.h +++ b/steam-runtime-tools/library.h @@ -92,7 +92,9 @@ typedef enum SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS } SrtLibrarySymbolsFormat; +const char *srt_library_get_requested_name (SrtLibrary *self); const char *srt_library_get_absolute_path (SrtLibrary *self); +G_DEPRECATED_FOR(srt_library_get_requested_name) const char *srt_library_get_soname (SrtLibrary *self); const char *srt_library_get_messages (SrtLibrary *self); const char *srt_library_get_multiarch_tuple (SrtLibrary *self); @@ -100,7 +102,8 @@ SrtLibraryIssues srt_library_get_issues (SrtLibrary *self); const char * const *srt_library_get_missing_symbols (SrtLibrary *self); const char * const *srt_library_get_misversioned_symbols (SrtLibrary *self); const char * const *srt_library_get_dependencies (SrtLibrary *self); -SrtLibraryIssues srt_check_library_presence (const char *soname, +const char *srt_library_get_real_soname (SrtLibrary *self); +SrtLibraryIssues srt_check_library_presence (const char *requested_name, const char *multiarch, const char *symbols_path, SrtLibrarySymbolsFormat symbols_format, diff --git a/steam-runtime-tools/system-info.c b/steam-runtime-tools/system-info.c index 3cb0a97ac5dc1e512e704bbecbbed3aeb67ceb6e..fdfb25bddf32651623b4b875d3885e48ce31e3f6 100644 --- a/steam-runtime-tools/system-info.c +++ b/steam-runtime-tools/system-info.c @@ -826,7 +826,8 @@ srt_system_info_can_write_to_uinput (SrtSystemInfo *self) static gint library_compare (SrtLibrary *a, SrtLibrary *b) { - return g_strcmp0 (srt_library_get_soname (a), srt_library_get_soname (b)); + return g_strcmp0 (srt_library_get_requested_name (a), + srt_library_get_requested_name (b)); } static gint @@ -1486,13 +1487,14 @@ srt_system_info_check_libraries (SrtSystemInfo *self, * srt_system_info_check_library: * @self: The #SrtSystemInfo object to use. * @multiarch_tuple: A multiarch tuple like %SRT_ABI_I386, representing an ABI. - * @soname: (type filename): The `SONAME` of a shared library, for example `libjpeg.so.62`. + * @requested_name: (type filename): The `SONAME` of a shared library, for + * example `libjpeg.so.62`. * @more_details_out: (out) (optional) (transfer full): Used to return an - * #SrtLibrary object representing the shared library provided by @soname. - * Free with `g_object_unref()`. + * #SrtLibrary object representing the shared library provided + * by @requested_name. Free with `g_object_unref()`. * - * Check if @soname is available in the running system and whether it conforms - * to the `deb-symbols(5)` files `*.symbols` in the @multiarch + * Check if @requested_name is available in the running system and whether + * it conforms to the `deb-symbols(5)` files `*.symbols` in the @multiarch * subdirectory of #SrtSystemInfo:expectations. * * Returns: A bitfield containing problems, or %SRT_LIBRARY_ISSUES_NONE @@ -1501,7 +1503,7 @@ srt_system_info_check_libraries (SrtSystemInfo *self, SrtLibraryIssues srt_system_info_check_library (SrtSystemInfo *self, const gchar *multiarch_tuple, - const gchar *soname, + const gchar *requested_name, SrtLibrary **more_details_out) { Abi *abi = NULL; @@ -1520,7 +1522,7 @@ srt_system_info_check_library (SrtSystemInfo *self, g_return_val_if_fail (SRT_IS_SYSTEM_INFO (self), SRT_LIBRARY_ISSUES_UNKNOWN); g_return_val_if_fail (multiarch_tuple != NULL, SRT_LIBRARY_ISSUES_UNKNOWN); - g_return_val_if_fail (soname != NULL, SRT_LIBRARY_ISSUES_UNKNOWN); + g_return_val_if_fail (requested_name != NULL, SRT_LIBRARY_ISSUES_UNKNOWN); g_return_val_if_fail (more_details_out == NULL || *more_details_out == NULL, SRT_LIBRARY_ISSUES_UNKNOWN); @@ -1530,7 +1532,7 @@ srt_system_info_check_library (SrtSystemInfo *self, return SRT_LIBRARY_ISSUES_CANNOT_LOAD; /* If we have the result already in cache, we return it */ - library = g_hash_table_lookup (abi->cached_results, soname); + library = g_hash_table_lookup (abi->cached_results, requested_name); if (library != NULL) { if (more_details_out != NULL) @@ -1584,9 +1586,9 @@ srt_system_info_check_library (SrtSystemInfo *self, /* This line introduces a new SONAME, which might * be the one we are interested in. */ char *soname_found = g_strdup (strsep (&pointer_into_line, " \t")); - if (g_strcmp0 (soname_found, soname) == 0) + if (g_strcmp0 (soname_found, requested_name) == 0) { - gchar **hidden_deps = g_hash_table_lookup (self->cached_hidden_deps, soname); + gchar **hidden_deps = g_hash_table_lookup (self->cached_hidden_deps, requested_name); issues = _srt_check_library_presence (self->helpers_path, soname_found, multiarch_tuple, @@ -1614,14 +1616,14 @@ srt_system_info_check_library (SrtSystemInfo *self, /* The SONAME's symbols file is not available. * We do instead a simple absence/presence check. */ issues = _srt_check_library_presence (self->helpers_path, - soname, + requested_name, multiarch_tuple, NULL, NULL, NULL, SRT_LIBRARY_SYMBOLS_FORMAT_DEB_SYMBOLS, &library); - g_hash_table_insert (abi->cached_results, g_strdup (soname), library); + g_hash_table_insert (abi->cached_results, g_strdup (requested_name), library); abi->cached_combined_issues |= issues; if (more_details_out != NULL) *more_details_out = g_object_ref (library); diff --git a/tests/library.c b/tests/library.c index bd743bc5024cb06752b5543ed6e5489f8971640a..64142ee6ab33adc08c9bb9008df31961382c1238 100644 --- a/tests/library.c +++ b/tests/library.c @@ -72,7 +72,9 @@ test_object (Fixture *f, SrtLibraryIssues issues; gchar *messages; gchar *tuple; - gchar *soname; + gchar *requested_name; + gchar *compat_soname; + gchar *real_soname; gchar *absolute_path; GStrv missing_mutable; GStrv misversioned_mutable; @@ -89,6 +91,7 @@ test_object (Fixture *f, NULL, NULL, NULL, + "libz_special.so.1", 0, 0); g_assert_cmpint (srt_library_get_issues (library), ==, @@ -96,8 +99,14 @@ test_object (Fixture *f, g_assert_cmpstr (srt_library_get_messages (library), ==, NULL); g_assert_cmpstr (srt_library_get_multiarch_tuple (library), ==, "arm-linux-gnueabihf"); - g_assert_cmpstr (srt_library_get_soname (library), ==, + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libz.so.1"); + G_GNUC_BEGIN_IGNORE_DEPRECATIONS + g_assert_cmpstr (srt_library_get_soname (library), ==, + srt_library_get_requested_name (library)); + G_GNUC_END_IGNORE_DEPRECATIONS + g_assert_cmpstr (srt_library_get_real_soname (library), ==, + "libz_special.so.1"); g_assert_cmpstr (srt_library_get_absolute_path (library), ==, "/usr/lib/libz.so.1"); missing = srt_library_get_missing_symbols (library); @@ -112,17 +121,21 @@ test_object (Fixture *f, g_object_get (library, "messages", &messages, "multiarch-tuple", &tuple, - "soname", &soname, + "requested-name", &requested_name, + "real-soname", &real_soname, "absolute-path", &absolute_path, "missing-symbols", &missing_mutable, "misversioned-symbols", &misversioned_mutable, "dependencies", &dependencies_mutable, "issues", &issues, + "soname", &compat_soname, NULL); g_assert_cmpint (issues, ==, SRT_LIBRARY_ISSUES_NONE); g_assert_cmpstr (messages, ==, NULL); g_assert_cmpstr (tuple, ==, "arm-linux-gnueabihf"); - g_assert_cmpstr (soname, ==, "libz.so.1"); + g_assert_cmpstr (requested_name, ==, "libz.so.1"); + g_assert_cmpstr (compat_soname, ==, requested_name); + g_assert_cmpstr (real_soname, ==, "libz_special.so.1"); g_assert_cmpstr (absolute_path, ==, "/usr/lib/libz.so.1"); g_assert_nonnull (missing_mutable); g_assert_cmpstr (missing_mutable[0], ==, NULL); @@ -132,7 +145,9 @@ test_object (Fixture *f, g_assert_cmpstr (dependencies_mutable[0], ==, NULL); g_free (messages); g_free (tuple); - g_free (soname); + g_free (requested_name); + g_free (compat_soname); + g_free (real_soname); g_free (absolute_path); g_strfreev (missing_mutable); g_strfreev (misversioned_mutable); @@ -148,6 +163,7 @@ test_object (Fixture *f, one_missing, one_misversioned, two_deps, + NULL, 0, 0); g_assert_cmpint (srt_library_get_issues (library) & @@ -158,8 +174,9 @@ test_object (Fixture *f, "ld.so: libjpeg.so.62: nope\n"); g_assert_cmpstr (srt_library_get_multiarch_tuple (library), ==, "s390x-linux-gnu"); - g_assert_cmpstr (srt_library_get_soname (library), ==, + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libjpeg.so.62"); + g_assert_cmpstr (srt_library_get_real_soname (library), ==, NULL); g_assert_cmpstr (srt_library_get_absolute_path (library), ==, "/usr/lib/libjpeg.so.62"); missing = srt_library_get_missing_symbols (library); @@ -178,7 +195,8 @@ test_object (Fixture *f, g_object_get (library, "messages", &messages, "multiarch-tuple", &tuple, - "soname", &soname, + "requested-name", &requested_name, + "real-soname", &real_soname, "absolute-path", &absolute_path, "missing-symbols", &missing_mutable, "misversioned-symbols", &misversioned_mutable, @@ -189,7 +207,8 @@ test_object (Fixture *f, g_assert_cmpint (issues & SRT_LIBRARY_ISSUES_MISVERSIONED_SYMBOLS, !=, 0); g_assert_cmpstr (messages, ==, "ld.so: libjpeg.so.62: nope\n"); g_assert_cmpstr (tuple, ==, "s390x-linux-gnu"); - g_assert_cmpstr (soname, ==, "libjpeg.so.62"); + g_assert_cmpstr (requested_name, ==, "libjpeg.so.62"); + g_assert_cmpstr (real_soname, ==, NULL); g_assert_cmpstr (absolute_path, ==, "/usr/lib/libjpeg.so.62"); g_assert_nonnull (missing_mutable); g_assert_cmpstr (missing_mutable[0], ==, one_missing[0]); @@ -203,7 +222,8 @@ test_object (Fixture *f, g_assert_cmpstr (dependencies_mutable[2], ==, NULL); g_free (messages); g_free (tuple); - g_free (soname); + g_free (real_soname); + g_free (requested_name); g_free (absolute_path); g_strfreev (missing_mutable); g_strfreev (misversioned_mutable); diff --git a/tests/system-info.c b/tests/system-info.c index dd2e4a0847d89e56132b2abc3b024f921a51b7f3..127a708e58ac85fc5c301e4a94f3c8b1417faf89 100644 --- a/tests/system-info.c +++ b/tests/system-info.c @@ -178,7 +178,7 @@ check_libraries_result (GList *libraries) * which one it should be. */ library = l->data; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libgio-2.0.so.0"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libgio-2.0.so.0"); missing_symbols = srt_library_get_missing_symbols (library); g_assert_nonnull (missing_symbols); g_assert_cmpstr (missing_symbols[0], ==, NULL); @@ -208,7 +208,7 @@ check_libraries_result (GList *libraries) l = g_list_next (l); library = l->data; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libglib-2.0.so.0"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libglib-2.0.so.0"); missing_symbols = srt_library_get_missing_symbols (library); g_assert_nonnull (missing_symbols); g_assert_cmpstr (missing_symbols[0], ==, NULL); @@ -238,7 +238,7 @@ check_libraries_result (GList *libraries) l = g_list_next (l); library = l->data; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libtheoraenc.so.1"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libtheoraenc.so.1"); missing_symbols = srt_library_get_missing_symbols (library); g_assert_nonnull (missing_symbols); g_assert_cmpstr (missing_symbols[0], ==, NULL); @@ -268,7 +268,7 @@ check_libraries_result (GList *libraries) l = g_list_next (l); library = l->data; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libz.so.1"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libz.so.1"); missing_symbols = srt_library_get_missing_symbols (library); g_assert_nonnull (missing_symbols); g_assert_cmpstr (missing_symbols[0], ==, NULL); @@ -383,7 +383,7 @@ check_library_result (SrtLibrary *library) const char * const *dependencies; gboolean seen_libc; - g_assert_cmpstr (srt_library_get_soname (library), ==, "libz.so.1"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libz.so.1"); missing_symbols = srt_library_get_missing_symbols (library); g_assert_nonnull (missing_symbols); @@ -463,7 +463,7 @@ check_library_libz_missing_sym_result (SrtLibrary *library) gboolean seen_libc; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libz.so.1"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libz.so.1"); g_debug ("path to libz.so.1 is %s", srt_library_get_absolute_path (library)); g_assert_true (srt_library_get_absolute_path (library)[0] == '/'); g_assert_true (g_file_test (srt_library_get_absolute_path (library), G_FILE_TEST_EXISTS)); @@ -513,7 +513,7 @@ check_missing_libraries_result (GList *libraries) * which one it should be. */ library = l->data; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libgio-MISSING-2.0.so.0"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libgio-MISSING-2.0.so.0"); g_assert_cmpstr (srt_library_get_absolute_path (library), ==, NULL); g_assert_cmpint (srt_library_get_issues (library), ==, SRT_LIBRARY_ISSUES_CANNOT_LOAD); @@ -534,7 +534,7 @@ check_missing_libraries_result (GList *libraries) l = g_list_next (l); library = l->data; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libglib-2.0.so.0"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libglib-2.0.so.0"); g_debug ("path to libglib-2.0.so.0 is %s", srt_library_get_absolute_path (library)); g_assert_true (srt_library_get_absolute_path (library)[0] == '/'); g_assert_true (g_file_test (srt_library_get_absolute_path (library), G_FILE_TEST_EXISTS)); @@ -612,7 +612,7 @@ check_library_missing_lib_result (SrtLibrary *library) const char * const *dependencies; g_assert_nonnull (library); - g_assert_cmpstr (srt_library_get_soname (library), ==, "libMISSING.so.62"); + g_assert_cmpstr (srt_library_get_requested_name (library), ==, "libMISSING.so.62"); g_assert_cmpstr (srt_library_get_absolute_path (library), ==, NULL); missing_symbols = srt_library_get_missing_symbols (library);