summaryrefslogtreecommitdiff
path: root/cmake/modules/UseABICheck.cmake
blob: cd08c6a3e691a439f9e9a7b367acba9ee3b63a3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#
# ABI Check related macros
#
# ABI compliance checker can be obtained from
# http://ispras.linux-foundation.org/index.php/ABI_compliance_checker
# Checked using version 1.21.12

MACRO(ABICHECK _libname)
	set(ABICHECK_TMPDIR ${CMAKE_CURRENT_BINARY_DIR}/abi-check-headers)
	set(ABICHECK_COMMAND abi-compliance-checker -l ${_libname} -v2 ${FULL_SO_VERSION}
		-relpath ${CMAKE_CURRENT_BINARY_DIR} -dump-abi abi-descriptor.xml
		|| cat ${CMAKE_CURRENT_BINARY_DIR}/logs/${_libname}/[0-9]*/log.txt)
	get_directory_property(INCLUDE_DIRS INCLUDE_DIRECTORIES)
	list(REMOVE_DUPLICATES INCLUDE_DIRS)
	string(REGEX REPLACE ";" "\n" INCLUDE_DIRS "${INCLUDE_DIRS}")
	configure_file("${CMAKE_SOURCE_DIR}/abi-descriptor.template" abi-descriptor.xml)
	# discover and substitute list of include directories for ABI compatibility
	# checks
	file(GLOB ABICHECK_HEADERS RELATIVE ${CMAKE_CURRENT_BINARY_DIR} *.h)
	set(ABICHECK_HEADERS ${ABICHECK_HEADERS} ${CMAKE_SOURCE_DIR}/ws_symbol_export.h)
	add_custom_target(dumpabi-${_libname} DEPENDS ${_libname}.abi.tar.gz)
	set_target_properties(dumpabi-${_libname} PROPERTIES FOLDER "Auxiliary")
	if (WIN32)
		set(ABI_COPY_COMMAND xcopy)
		set(ABI_COPY_FLAGS /d)
	else()
		set(ABI_COPY_COMMAND cp)
		set(ABI_COPY_FLAGS)
	endif()
ENDMACRO()