diff options
Diffstat (limited to 'cmake/QtGenerateLibHelpers.cmake')
-rw-r--r-- | cmake/QtGenerateLibHelpers.cmake | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/cmake/QtGenerateLibHelpers.cmake b/cmake/QtGenerateLibHelpers.cmake new file mode 100644 index 0000000000..06de484ac4 --- /dev/null +++ b/cmake/QtGenerateLibHelpers.cmake @@ -0,0 +1,90 @@ +# Given "/usr/lib/x86_64-linux-gnu/libcups.so" +# Returns "cups" or an empty string if the file is not an absolute library path. +# Aka it strips the "lib" prefix, the .so extension and the base path. +function(qt_get_library_name_without_prefix_and_suffix out_var file_path) + set(out_value "") + if(IS_ABSOLUTE "${file_path}") + get_filename_component(basename "${file_path}" NAME_WE) + get_filename_component(ext "${file_path}" EXT) + foreach(libsuffix ${LIBRARY_SUFFIXES}) + # Handle weird prefix extensions like in the case of + # "/usr/lib/x86_64-linux-gnu/libglib-2.0.so" + # it's ".0.so". + if(ext MATCHES "^(\\.[0-9]+)*${libsuffix}(\\.[0-9]+)*") + set(is_linkable_library TRUE) + set(weird_numbered_extension "${CMAKE_MATCH_1}") + break() + endif() + endforeach() + if(is_linkable_library) + set(out_value "${basename}") + if(LIBRARY_PREFIXES) + foreach(libprefix ${LIBRARY_PREFIXES}) + # Strip any library prefix like "lib" for a library that we will use with a link + # flag. + if(libprefix AND out_value MATCHES "^${libprefix}(.+)") + set(out_value "${CMAKE_MATCH_1}") + break() + endif() + endforeach() + endif() + if(weird_numbered_extension) + set(out_value "${out_value}${weird_numbered_extension}") + endif() + endif() + endif() + + # Reverse the dependency order to be in sync with what qmake generated .pri files + # have. + list(REVERSE out_list) + + set(${out_var} "${out_value}" PARENT_SCOPE) +endfunction() + +# Given "/usr/lib/x86_64-linux-gnu/libcups.so" +# Returns "-lcups" or an empty string if the file is not an absolute library path. +function(qt_get_library_with_link_flag out_var file_path) + qt_get_library_name_without_prefix_and_suffix(lib_name "${file_path}") + + set(out_value "") + if(lib_name) + set(out_value "${lib_name}") + if(LINK_LIBRARY_FLAG) + string(PREPEND out_value "${LINK_LIBRARY_FLAG}") + endif() + endif() + + set(${out_var} "${out_value}" PARENT_SCOPE) +endfunction() + +# Given a list of potential library paths, returns a transformed list where absolute library paths +# are replaced with library link flags. +function(qt_transform_absolute_library_paths_to_link_flags out_var library_path_list) + set(out_list "") + foreach(library_path ${library_path_list}) + qt_get_library_with_link_flag(lib_name_with_link_flag "${library_path}") + if(lib_name_with_link_flag) + list(APPEND out_list "${lib_name_with_link_flag}") + else() + list(APPEND out_list "${library_path}") + endif() + endforeach() + set(${out_var} "${out_list}" PARENT_SCOPE) +endfunction() + +function(qt_strip_library_version_suffix out_var file_path) + get_filename_component(dir "${file_path}" DIRECTORY) + get_filename_component(basename "${file_path}" NAME_WE) + get_filename_component(ext "${file_path}" EXT) + foreach(libsuffix ${LIBRARY_SUFFIXES}) + if(ext MATCHES "^${libsuffix}(\\.[0-9]+)+") + set(ext ${libsuffix}) + break() + endif() + endforeach() + set(final_value "${basename}${ext}") + if(dir) + set(final_value "${dir}/${final_value}") + endif() + set(${out_var} "${final_value}" PARENT_SCOPE) +endfunction() |