Merge pull request #216 from DerDakon/cmake-cleanup

CMake: simplify code
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 55c3062..868d557 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,39 +14,35 @@
 
 if(UNIX)
 find_package(PkgConfig)
-if(${PKG_CONFIG_FOUND})
+find_package(ZLIB)
 if(BLOATY_ENABLE_RE2)
   pkg_search_module(RE2 re2)
-endif(BLOATY_ENABLE_RE2)
+endif()
 pkg_search_module(CAPSTONE capstone)
 pkg_search_module(PROTOBUF protobuf)
-pkg_search_module(ZLIB zlib)
 if(BLOATY_ENABLE_RE2)
-  if(${RE2_FOUND})
+  if(RE2_FOUND)
     MESSAGE(STATUS "System re2 found, using")
-  else(${RE2_FOUND})
+  else()
     MESSAGE(STATUS "System re2 not found, using bundled version")
-  endif(${RE2_FOUND})
-endif(BLOATY_ENABLE_RE2)
-if(${CAPSTONE_FOUND})
+  endif()
+endif()
+if(CAPSTONE_FOUND)
   MESSAGE(STATUS "System capstone found, using")
-else(${CAPSTONE_FOUND})
+else()
   MESSAGE(STATUS "System capstone not found, using bundled version")
-endif(${CAPSTONE_FOUND})
-if(${PROTOBUF_FOUND})
+endif()
+if(PROTOBUF_FOUND)
   MESSAGE(STATUS "System protobuf found, using")
-else(${PROTOBUF_FOUND})
+else()
   MESSAGE(STATUS "System protobuf not found, using bundled version")
-endif(${PROTOBUF_FOUND})
-if (${ZLIB_FOUND})
+endif()
+if (ZLIB_FOUND)
   MESSAGE(STATUS "System zlib found, using")
-else(${ZLIB_FOUND})
+else()
   MESSAGE(STATUS "System zlib not found, using bundled version")
-endif(${ZLIB_FOUND})
-else(${PKG_CONFIG_FOUND})
-  MESSAGE(STATUS "pkg-config not found, using bundled dependencies")
-endif(${PKG_CONFIG_FOUND})
-endif(UNIX)
+endif()
+endif()
 
 # Set default build type.
 if(NOT CMAKE_BUILD_TYPE)
@@ -67,7 +63,7 @@
 add_definitions(-D_LIBCXXABI_FUNC_VIS=)  # For Demumble.
 if(BLOATY_ENABLE_RE2)
   add_definitions(-DUSE_RE2)
-endif(BLOATY_ENABLE_RE2)
+endif()
 
 # Set MSVC runtime before including thirdparty libraries
 if(MSVC)
@@ -78,51 +74,52 @@
   foreach(flag_var
       CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
       CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
-    if(${flag_var} MATCHES "/MD")
+    if (flag_var MATCHES "/MD")
       string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
-    endif(${flag_var} MATCHES "/MD")
-  endforeach(flag_var)
+    endif()
+  endforeach()
 endif()
 
+set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+find_package(Threads REQUIRED)
+
 if(UNIX)
   if(BLOATY_ENABLE_RE2)
-    if(${RE2_FOUND})
+    if(RE2_FOUND)
       include_directories(${RE2_INCLUDE_DIRS})
-    else(${RE2_FOUND})
+    else()
       set(RE2_BUILD_TESTING OFF CACHE BOOL "enable testing for RE2" FORCE)
       add_subdirectory(third_party/re2)
       include_directories(third_party/re2)
-    endif(${RE2_FOUND})
-  endif(BLOATY_ENABLE_RE2)
-  if(${CAPSTONE_FOUND})
+    endif()
+  endif()
+  if(CAPSTONE_FOUND)
     include_directories(${CAPSTONE_INCLUDE_DIRS})
-  else(${CAPSTONE_FOUND})
+  else()
     set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Build shared library" FORCE)
     set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE)
     add_subdirectory(third_party/capstone)
     include_directories(third_party/capstone/include)
-  endif(${CAPSTONE_FOUND})
-  if(${PROTOBUF_FOUND})
+  endif()
+  if(PROTOBUF_FOUND)
     include_directories(${PROTOBUF_INCLUDE_DIRS})
-  else(${PROTOBUF_FOUND})
+  else()
     set(protobuf_BUILD_TESTS OFF CACHE BOOL "enable tests for proto2" FORCE)
     set(protobuf_BUILD_SHARED_LIBS OFF CACHE BOOL "enable shared libs for proto2" FORCE)
     add_subdirectory(third_party/protobuf/cmake)
     include_directories(SYSTEM third_party/protobuf/src)
-  endif(${PROTOBUF_FOUND})
-  if(${ZLIB_FOUND})
-    include_directories(${ZLIB_INCLUDE_DIRS})
-  else(${ZLIB_FOUND})
+  endif()
+  if(NOT ZLIB_FOUND)
     add_subdirectory(third_party/zlib)
     include_directories(third_party/zlib)
-  endif(${ZLIB_FOUND})
-else(UNIX)
+  endif()
+else()
   if(BLOATY_ENABLE_RE2)
     set(RE2_BUILD_TESTING OFF CACHE BOOL "enable testing for RE2" FORCE)
     add_subdirectory(third_party/re2)
     include_directories(third_party/re2)
     set_property(TARGET re2 PROPERTY FOLDER "third_party")
-  endif(BLOATY_ENABLE_RE2)
+  endif()
 
   set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Build shared library" FORCE)
   set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE)
@@ -146,7 +143,7 @@
   set_property(TARGET libprotobuf-lite PROPERTY FOLDER "third_party")
   set_property(TARGET libprotoc PROPERTY FOLDER "third_party")
   set_property(TARGET protoc PROPERTY FOLDER "third_party")
-endif(UNIX)
+endif()
 
 include_directories(.)
 include_directories(src)
@@ -156,8 +153,8 @@
 # Baseline build flags.
 if(MSVC)
   set(CMAKE_CXX_FLAGS "/EHsc /wd4018 /D_CRT_SECURE_NO_WARNINGS /DNOMINMAX")
-else(MSVC)
-  set(CMAKE_CXX_FLAGS "-std=c++11 -W -Wall -Wno-sign-compare")
+else()
+  set(CMAKE_CXX_FLAGS "-W -Wall -Wno-sign-compare")
   set(CMAKE_CXX_FLAGS_DEBUG "-g1")
   set(CMAKE_CXX_FLAGS_RELEASE "-O2")
   set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g1")
@@ -168,7 +165,7 @@
 elseif(UNIX)
   if(BLOATY_ENABLE_BUILDID)
     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id")
-  endif(BLOATY_ENABLE_BUILDID)
+  endif()
 endif()
 
 # When using Ninja, compiler output won't be colorized without this.
@@ -194,7 +191,7 @@
 endif()
 
 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src)
-if(${PROTOC_FOUND})
+if(PROTOC_FOUND)
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/bloaty.pb.cc
   DEPENDS protoc ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty.proto
@@ -202,14 +199,14 @@
       --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/src
       -I${CMAKE_CURRENT_SOURCE_DIR}/src
 )
-else(${PROTOC_FOUND})
+else()
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/bloaty.pb.cc
   COMMAND protoc ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty.proto
       --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/src
       -I${CMAKE_CURRENT_SOURCE_DIR}/src
 )
-endif(${PROTOC_FOUND})
+endif()
 
 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty_package.bloaty
      DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
@@ -258,85 +255,74 @@
 
 if(UNIX)
   set(LIBBLOATY_LIBS libbloaty)
-  if(${PROTOBUF_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${PROTOBUF_LIBRARIES})
-  else(${PROTOBUF_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} libprotoc)
-  endif(${PROTOBUF_FOUND})
+  if(PROTOBUF_FOUND)
+    list(APPEND LIBBLOATY_LIBS ${PROTOBUF_LIBRARIES})
+  else()
+    list(APPEND LIBBLOATY_LIBS libprotoc)
+  endif()
   if(BLOATY_ENABLE_RE2)
-    if(${RE2_FOUND})
-      set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${RE2_LIBRARIES})
-    else(${RE2_FOUND})
-      set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} re2)
-    endif(${RE2_FOUND})
-  endif(BLOATY_ENABLE_RE2)
-  if(${CAPSTONE_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${CAPSTONE_LIBRARIES})
-  else(${CAPSTONE_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} capstone-static)
-  endif(${CAPSTONE_FOUND})
-  if(${ZLIB_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${ZLIB_LIBRARIES})
-  else(${ZLIB_FOUND})
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} zlib)
-  endif(${ZLIB_FOUND})
-else(UNIX)
+    if(RE2_FOUND)
+      list(APPEND LIBBLOATY_LIBS ${RE2_LIBRARIES})
+    else()
+      list(APPEND LIBBLOATY_LIBS re2)
+    endif()
+  endif()
+  if(CAPSTONE_FOUND)
+    list(APPEND LIBBLOATY_LIBS ${CAPSTONE_LIBRARIES})
+  else()
+    list(APPEND LIBBLOATY_LIBS capstone-static)
+  endif()
+  if(ZLIB_FOUND)
+    list(APPEND LIBBLOATY_LIBS ZLIB::ZLIB)
+  else()
+    list(APPEND LIBBLOATY_LIBS zlib)
+  endif()
+else()
   set(LIBBLOATY_LIBS libbloaty libprotoc capstone-static)
   if(BLOATY_ENABLE_RE2)
-    set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} re2)
-  endif(BLOATY_ENABLE_RE2)
-  set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} zlibstatic)
-endif(UNIX)
+    list(APPEND LIBBLOATY_LIBS  re2)
+  endif()
+  list(APPEND LIBBLOATY_LIBS zlibstatic)
+endif()
 
 if(UNIX)
   if(BLOATY_ENABLE_RE2)
-    if(${RE2_FOUND})
+    if(RE2_FOUND)
       link_directories(${RE2_LIBRARY_DIRS})
-    endif(${RE2_FOUND})
-  endif(BLOATY_ENABLE_RE2)
-  if(${CAPSTONE_FOUND})
+    endif()
+  endif()
+  if(CAPSTONE_FOUND)
     link_directories(${CAPSTONE_LIBRARY_DIRS})
-  endif(${CAPSTONE_FOUND})
-  if(${PROTOBUF_FOUND})
+  endif()
+  if(PROTOBUF_FOUND)
     link_directories(${PROTOBUF_LIBRARY_DIRS})
-  endif(${PROTOBUF_FOUND})
-  if(${ZLIB_FOUND})
-    link_directories(${ZLIB_LIBRARY_DIRS})
-  endif(${ZLIB_FOUND})
-endif(UNIX)
+  endif()
+endif()
+
+list(APPEND LIBBLOATY_LIBS Threads::Threads)
 
 if(DEFINED ENV{LIB_FUZZING_ENGINE})
   message("LIB_FUZZING_ENGINE set, building fuzz_target instead of Bloaty")
   add_executable(fuzz_target tests/fuzz_target.cc)
-  target_link_libraries(fuzz_target "${LIBBLOATY_LIBS}" "${CMAKE_THREAD_LIBS_INIT}" $ENV{LIB_FUZZING_ENGINE})
+  target_link_libraries(fuzz_target ${LIBBLOATY_LIBS} $ENV{LIB_FUZZING_ENGINE})
 else()
   add_executable(bloaty src/main.cc)
-  target_link_libraries(bloaty "${LIBBLOATY_LIBS}")
+  target_link_libraries(bloaty ${LIBBLOATY_LIBS})
 
   set_property(TARGET bloaty PROPERTY FOLDER "bloaty")
 
-  # All of this is to add -pthread, which is required by re2 (not us).
-  find_package(Threads REQUIRED)
-  if(THREADS_HAVE_PTHREAD_ARG)
-    set_property(TARGET bloaty PROPERTY COMPILE_OPTIONS "-pthread")
-    set_property(TARGET bloaty PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
-  endif()
-  if(CMAKE_THREAD_LIBS_INIT)
-    target_link_libraries(bloaty "${CMAKE_THREAD_LIBS_INIT}")
-  endif()
-
   if(BLOATY_ENABLE_CMAKETARGETS)
     install(
       TARGETS bloaty
       EXPORT ${PROJECT_NAME}Targets
       RUNTIME DESTINATION bin
     )
-  else(BLOATY_ENABLE_CMAKETARGETS)
+  else()
     install(
       TARGETS bloaty
       RUNTIME DESTINATION bin
     )
-  endif(BLOATY_ENABLE_CMAKETARGETS)
+  endif()
 
   if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/tests")
     enable_testing()
@@ -356,12 +342,12 @@
 
       foreach(target ${TEST_TARGETS})
         add_executable(${target} tests/${target}.cc)
-        target_link_libraries(${target} "${LIBBLOATY_LIBS}" gtest_main gmock "${CMAKE_THREAD_LIBS_INIT}")
+        target_link_libraries(${target} ${LIBBLOATY_LIBS} gtest_main gmock)
         set_property(TARGET ${target} PROPERTY FOLDER "tests")
       endforeach(target)
 
       add_executable(fuzz_test tests/fuzz_target.cc tests/fuzz_driver.cc)
-      target_link_libraries(fuzz_test "${LIBBLOATY_LIBS}" "${CMAKE_THREAD_LIBS_INIT}")
+      target_link_libraries(fuzz_test ${LIBBLOATY_LIBS})
       set_property(TARGET fuzz_test PROPERTY FOLDER "tests")
 
       foreach(testlib gmock gmock_main gtest gtest_main)
@@ -382,5 +368,5 @@
 
   if(BLOATY_ENABLE_CMAKETARGETS)
     install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})
-  endif(BLOATY_ENABLE_CMAKETARGETS)
+  endif()
 endif()