python/CMakeLists.txt: rework Python development files detection
[libftdi] / src / CMakeLists.txt
index 9fd86a6..7e81bea 100644 (file)
@@ -1,55 +1,81 @@
 # Includes
 include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}
-                     ${CMAKE_CURRENT_SOURCE_DIR}
-                     )
+        ${CMAKE_CURRENT_SOURCE_DIR}
+)
 
 # Version information
 set(SNAPSHOT_VERSION "unknown")
 execute_process(COMMAND git describe
-                OUTPUT_VARIABLE GIT_DESCRIBE_OUTPUT
-                RESULT_VARIABLE GIT_DESCRIBE_RESULT
-                OUTPUT_STRIP_TRAILING_WHITESPACE
-                )
-if(${GIT_DESCRIBE_RESULT} STREQUAL 0)
-  set(SNAPSHOT_VERSION ${GIT_DESCRIBE_OUTPUT})
+        OUTPUT_VARIABLE GIT_DESCRIBE_OUTPUT
+        RESULT_VARIABLE GIT_DESCRIBE_RESULT
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+if (${GIT_DESCRIBE_RESULT} STREQUAL 0)
+    set(SNAPSHOT_VERSION ${GIT_DESCRIBE_OUTPUT})
 endif ()
 message(STATUS "Detected git snapshot version: ${SNAPSHOT_VERSION}")
 
 configure_file(ftdi_version_i.h.in "${CMAKE_CURRENT_BINARY_DIR}/ftdi_version_i.h" @ONLY)
 
-# Targets
-set(c_sources     ${CMAKE_CURRENT_SOURCE_DIR}/ftdi.c ${CMAKE_CURRENT_SOURCE_DIR}/ftdi_stream.c CACHE INTERNAL "List of c sources" )
-set(c_headers     ${CMAKE_CURRENT_SOURCE_DIR}/ftdi.h CACHE INTERNAL "List of c headers" )
+if (MSVC)
+    # Disable some overly-verbose warnings activated by -Wall
+
+    # '<name>': function not inlined
+    add_compile_options(/wd4710)
+
+    # function '<name>' selected for automatic inline expansion
+    add_compile_options(/wd4711)
+
+    # Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified
+    add_compile_options(/wd5045)
 
-add_library(ftdi1 SHARED ${c_sources})
+    # '<type>': '4' bytes padding added after data member '<name>'
+    add_compile_options(/wd4820)
 
-math(EXPR VERSION_FIXUP "${MAJOR_VERSION} + 1")    # Compatiblity with previous releases
-set_target_properties(ftdi1 PROPERTIES VERSION ${VERSION_FIXUP}.${MINOR_VERSION}.0 SOVERSION 2)
-# Prevent clobbering each other during the build
-set_target_properties ( ftdi1 PROPERTIES CLEAN_DIRECT_OUTPUT 1 )
+    # conversion from '<type1>' to '<type2>', possible loss of data
+    add_compile_options(/wd4242 /wd4244 /wd4267)
 
+    # Disable warning on unsafe string functions
+    add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
 
-# Dependencies
-target_link_libraries(ftdi1 ${LIBUSB_LIBRARIES})
+    if (MSVC_VERSION GREATER_EQUAL 1913)
+        # Disable warnings from system headers
+        add_compile_options(/external:anglebrackets /external:W0)
+    endif ()
+endif ()
+
+# Targets
+set(c_sources ${CMAKE_CURRENT_SOURCE_DIR}/ftdi.c ${CMAKE_CURRENT_SOURCE_DIR}/ftdi_stream.c CACHE INTERNAL "List of c sources")
+set(c_headers ${CMAKE_CURRENT_SOURCE_DIR}/ftdi.h CACHE INTERNAL "List of c headers")
 
-install ( TARGETS ftdi1
-          RUNTIME DESTINATION bin
-          LIBRARY DESTINATION lib${LIB_SUFFIX}
-          ARCHIVE DESTINATION lib${LIB_SUFFIX}
-        )
+# Shared library
+if (SHAREDLIBS)
+    add_library(ftdi1 SHARED ${c_sources})
+    math(EXPR VERSION_FIXUP "${MAJOR_VERSION} + 1")    # Compatibility with previous releases
+    set_target_properties(ftdi1 PROPERTIES VERSION ${VERSION_FIXUP}.${MINOR_VERSION}.0 SOVERSION 2)
+    # Prevent clobbering each other during the build
+    set_target_properties(ftdi1 PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+    target_link_libraries(ftdi1 ${LIBUSB_LIBRARIES})
+    install(TARGETS ftdi1
+            RUNTIME DESTINATION bin
+            LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    )
+endif ()
 
-if ( STATICLIBS )
-  add_library(ftdi1-static STATIC ${c_sources})
-  target_link_libraries(ftdi1-static ${LIBUSB_LIBRARIES})
-  set_target_properties(ftdi1-static PROPERTIES OUTPUT_NAME "ftdi1")
-  set_target_properties(ftdi1-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
-  install ( TARGETS ftdi1-static
-            ARCHIVE DESTINATION lib${LIB_SUFFIX}
+# Static library
+if (STATICLIBS)
+    add_library(ftdi1-static STATIC ${c_sources})
+    target_link_libraries(ftdi1-static ${LIBUSB_LIBRARIES})
+    set_target_properties(ftdi1-static PROPERTIES OUTPUT_NAME "ftdi1")
+    set_target_properties(ftdi1-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+    install(TARGETS ftdi1-static
+            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
             COMPONENT staticlibs
-          )
+    )
 endif ()
 
-install ( FILES ${c_headers}
-          DESTINATION include/${PROJECT_NAME}
-          COMPONENT headers
-        )
+install(FILES ${c_headers}
+        DESTINATION include/${PROJECT_NAME}
+        COMPONENT headers
+)