diff --git a/CMakeModules/ABICheck.cmake b/CMakeModules/ABICheck.cmake
index bd46415..472c880 100644
--- a/CMakeModules/ABICheck.cmake
+++ b/CMakeModules/ABICheck.cmake
@@ -2,40 +2,40 @@
 
 # generate API/ABI report
 macro(LIBYANG_ABICHECK)
-	find_program(ABI_DUMPER abi-dumper)
-	find_package_handle_standard_args(abi-dumper DEFAULT_MSG ABI_DUMPER)
-	if(ABI_DUMPER)
-	    set(PUBLIC_HEADERS ${headers})
-	    string(PREPEND PUBLIC_HEADERS "${CMAKE_SOURCE_DIR}/")
-	    string(REPLACE ";" "\n${CMAKE_SOURCE_DIR}/" PUBLIC_HEADERS "${PUBLIC_HEADERS}")
-	    file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/public_headers CONTENT "${PUBLIC_HEADERS}")
-	    add_custom_target(abi-dump
-	            COMMAND ${ABI_DUMPER} ./libyang${CMAKE_SHARED_LIBRARY_SUFFIX} -o libyang.${LIBYANG_SOVERSION_FULL}.dump
-	            -lver ${LIBYANG_SOVERSION_FULL} -public-headers ${CMAKE_BINARY_DIR}/public_headers
-	            DEPENDS yang
-	            BYPRODUCTS ${CMAKE_BINARY_DIR}/libyang.${LIBYANG_SOVERSION_FULL}.dump
-	            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
-	            COMMENT Dumping ABI information for abi-check.)
-	endif()
-	
-	# check correctness of the SO version according to the API/ABI changes
-	find_program(ABI_CHECKER abi-compliance-checker)
-	find_package_handle_standard_args(abi-compliance-checker DEFAULT_MSG ABI_CHECKER)
-	if(ABI_DUMPER AND ABI_CHECKER)
-		set(ABIBASE_HASH "" CACHE STRING "GIT hash for the commit to compare current ABI to. If not set, base SO version commit is found.")
-		if (NOT ABIBASE_HASH)
-		    # check that we have some ABI base version already and get its hash in GIT
-		    set(ABIBASE_VERSION "${LIBYANG_MAJOR_VERSION}.0.0")
-		    execute_process(COMMAND bash "-c" "git log --pretty=oneline --grep=\"SOVERSION .* ${ABIBASE_VERSION}\$\" | cut -d' ' -f1"
-		            OUTPUT_VARIABLE ABIBASE_HASH)
-		else()
-			string(SUBSTRING ${ABIBASE_HASH} 0 8 ABIBASE_HASH_SHORT)
-			set(ABIBASE_VERSION "git-${ABIBASE_HASH_SHORT}")
-		endif()
-	    if(ABIBASE_HASH)
-	        # we have the ABI base version, so generate script for abi-check target
-	        string(REPLACE "\n" "" ABIBASE_HASH ${ABIBASE_HASH})
-	        file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/abibase.sh CONTENT "#!/bin/sh
+    find_program(ABI_DUMPER abi-dumper)
+    find_package_handle_standard_args(abi-dumper DEFAULT_MSG ABI_DUMPER)
+    if(ABI_DUMPER)
+        set(PUBLIC_HEADERS ${headers})
+        string(PREPEND PUBLIC_HEADERS "${CMAKE_SOURCE_DIR}/")
+        string(REPLACE ";" "\n${CMAKE_SOURCE_DIR}/" PUBLIC_HEADERS "${PUBLIC_HEADERS}")
+        file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/public_headers CONTENT "${PUBLIC_HEADERS}")
+        add_custom_target(abi-dump
+                COMMAND ${ABI_DUMPER} ./libyang${CMAKE_SHARED_LIBRARY_SUFFIX} -o libyang.${LIBYANG_SOVERSION_FULL}.dump
+                -lver ${LIBYANG_SOVERSION_FULL} -public-headers ${CMAKE_BINARY_DIR}/public_headers
+                DEPENDS yang
+                BYPRODUCTS ${CMAKE_BINARY_DIR}/libyang.${LIBYANG_SOVERSION_FULL}.dump
+                WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+                COMMENT Dumping ABI information for abi-check.)
+    endif()
+
+    # check correctness of the SO version according to the API/ABI changes
+    find_program(ABI_CHECKER abi-compliance-checker)
+    find_package_handle_standard_args(abi-compliance-checker DEFAULT_MSG ABI_CHECKER)
+    if(ABI_DUMPER AND ABI_CHECKER)
+        set(ABIBASE_HASH "" CACHE STRING "GIT hash for the commit to compare current ABI to. If not set, base SO version commit is found.")
+        if (NOT ABIBASE_HASH)
+            # check that we have some ABI base version already and get its hash in GIT
+            set(ABIBASE_VERSION "${LIBYANG_MAJOR_VERSION}.0.0")
+            execute_process(COMMAND bash "-c" "git log --pretty=oneline --grep=\"SOVERSION .* ${ABIBASE_VERSION}\$\" | cut -d' ' -f1"
+                    OUTPUT_VARIABLE ABIBASE_HASH)
+        else()
+            string(SUBSTRING ${ABIBASE_HASH} 0 8 ABIBASE_HASH_SHORT)
+            set(ABIBASE_VERSION "git-${ABIBASE_HASH_SHORT}")
+    endif()
+        if(ABIBASE_HASH)
+            # we have the ABI base version, so generate script for abi-check target
+            string(REPLACE "\n" "" ABIBASE_HASH ${ABIBASE_HASH})
+            file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/abibase.sh CONTENT "#!/bin/sh
 if [ ! -d abibase ]; then mkdir abibase; fi
 cd abibase
 if [ ! -f build/libyang.*.dump ]; then
@@ -52,18 +52,18 @@
     make abi-dump
 fi
 ")
-	        # abi-check target itself using abi-compliance-checker
-	        add_custom_target(abi-check
-	                COMMAND bash ./abibase.sh
-	                COMMAND ${ABI_CHECKER} -l libyang${CMAKE_SHARED_LIBRARY_SUFFIX} -old abibase/build/libyang.*.dump
-	                -new ./libyang.${LIBYANG_SOVERSION_FULL}.dump -s
-	                DEPENDS yang abi-dump
-	                BYPRODUCTS ${CMAKE_BINARY_DIR}/compat_reports/libyang${CMAKE_SHARED_LIBRARY_SUFFIX}/*_to_${LIBYANG_SOVERSION_FULL}/compat_report.html
-	                WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
-	                COMMENT Checking ABI compatibility with the ${ABIBASE_VERSION} version.)
-	    else()
-	        add_custom_target(abi-check
-	                COMMENT Nothing to check - missing base SOVERSION commit for ${ABIBASE_VERSION} version.)
-	    endif()
-	endif()
+            # abi-check target itself using abi-compliance-checker
+            add_custom_target(abi-check
+                    COMMAND bash ./abibase.sh
+                    COMMAND ${ABI_CHECKER} -l libyang${CMAKE_SHARED_LIBRARY_SUFFIX} -old abibase/build/libyang.*.dump
+                    -new ./libyang.${LIBYANG_SOVERSION_FULL}.dump -s
+                    DEPENDS yang abi-dump
+                    BYPRODUCTS ${CMAKE_BINARY_DIR}/compat_reports/libyang${CMAKE_SHARED_LIBRARY_SUFFIX}/*_to_${LIBYANG_SOVERSION_FULL}/compat_report.html
+                    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+                    COMMENT Checking ABI compatibility with the ${ABIBASE_VERSION} version.)
+        else()
+            add_custom_target(abi-check
+                    COMMENT Nothing to check - missing base SOVERSION commit for ${ABIBASE_VERSION} version.)
+        endif()
+    endif()
 endmacro()
