Changeset: c76d7e10d9c6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c76d7e10d9c6
Added Files:
        cmake/os_release_info.cmake
        ctest/cmake/CMakeLists.txt
        ctest/cmake/test_detect.c
        ctest/cmake/test_detect_bz2.c
        ctest/cmake/test_detect_curl.c
        ctest/cmake/test_detect_libz.c
        ctest/cmake/test_detect_lz4.c
        ctest/cmake/test_detect_lzma.c.in
        ctest/cmake/test_detect_pcre.c
        ctest/cmake/test_detect_proj.c
Modified Files:
        cmake/monetdb-functions.cmake
        ctest/CMakeLists.txt
Branch: mbedded
Log Message:

add unittests for cmake library detection


diffs (truncated from 524 to 300 lines):

diff --git a/cmake/monetdb-functions.cmake b/cmake/monetdb-functions.cmake
--- a/cmake/monetdb-functions.cmake
+++ b/cmake/monetdb-functions.cmake
@@ -102,6 +102,8 @@ function(create_include_object)
 endfunction()
 
 function(monetdb_cmake_summary)
+  include(os_release_info)
+
   message("Summary of cmake configuration of MonetDB")
   message("-----------------------------------------")
   if(${CMAKE_VERSION} VERSION_LESS "3.14.0")
@@ -109,6 +111,13 @@ function(monetdb_cmake_summary)
   else()
     message("Numpy target: ")
   endif()
+  message(STATUS "System name: ${CMAKE_SYSTEM_NAME}")
+  message(STATUS "System version: ${CMAKE_SYSTEM_VERSION}")
+  if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+    get_os_release_info(LINUX_DISTRO LINUX_DISTRO_VERSION)
+    message(STATUS "Linux distro: ${LINUX_DISTRO}")
+    message(STATUS "Linux distro version: ${LINUX_DISTRO_VERSION}")
+  endif()
   message(STATUS "Geos library: ${GEOS_FOUND}")
   message(STATUS "Gdal library: ${GDAL_FOUND}")
   message(STATUS "Lzma library: ${LZMA_FOUND}")
diff --git a/cmake/os_release_info.cmake b/cmake/os_release_info.cmake
new file mode 100644
--- /dev/null
+++ b/cmake/os_release_info.cmake
@@ -0,0 +1,169 @@
+# Copyright (c) 2018, Intel Corporation
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+
+if(NOT DEFINED _os_release_info)
+set(_os_release_info TRUE)
+
+
+# os_release_info.cmake - Function to dump OS name and version
+
+# This file has no dependencies on other files (e.g., functions or definitions)
+# of the local cmake environment.
+
+# Set cmake policies for at least this level:
+cmake_minimum_required(VERSION 2.8.12)
+
+
+# Function get_os_release_info - Determine and return OS name and version
+#
+# Args:
+# 1.  the name of a variable to receive os_name
+# 2.  the name of a variable to receive os_version
+#
+# Return values: (Quotation marks are always stripped).
+# Upon failure, return values are null strings.
+#
+# Examples:
+#   os_name           os_version
+#   --------------    -------
+#   clear-linux-os    21180          (Changes twice daily)
+#   ubuntu            12.04  16.04  17.10  18.04
+#   fedora            27
+#   centos            6.9  7.4.1708
+#
+# Potential sources are tried (in order of preference) until a
+# suitable one is found.
+
+# Implementation documentation:
+#
+# The potential sources, in order, are as follows.
+# - /etc/centos-release
+#       Centos 7 also has /etc/os-release.  File /etc/os-release is less
+#       precise about the Centos version (e.g., "7" instead of "7.4.1708").
+#       For that reason, this file is checked first.
+#       Examples:
+#       CentOS release 6.9 (Final)
+#       CentOS Linux release 7.4.1708 (Core)
+# - /usr/lib/os-release
+#       Present for Clear Linux, modern Fedora, and Ubuntu since some time
+#       between 14.04 and 16.04.  The ID and VERSION_ID values are used.
+#       Examples:
+#       ID=clear-linux-os      VERSION_ID=21180
+#       ID=fedora              VERSION_ID=27
+#       ID=ubuntu              VERSION_ID="14.04"
+#       ID=ubuntu              VERSION_ID="16.04"
+#       ID="ubuntu"            VERSION_ID="17.10"
+# - /etc/os-release - Same form as (sometimes a link to) /usr/lib/os-release
+#       ID="Ubuntu"            VERSION_ID="12.04"
+#       ID="Ubuntu"            VERSION_ID="14.04"
+#           with a symbolic link: /etc/os-release -> ../usr/lib/os-release
+#       ID="CentOS Linux"      VERSION_ID="7"    Also: ID_LIKE="rhel fedora"
+# - /etc/lsb-release
+#       For Centos, not too meaningful.
+#       Other "OS"s are more reasonable:
+#       DISTRIB_ID=Ubuntu      DISTRIB_RELEASE=12.04
+#       DISTRIB_ID=Ubuntu      DISTRIB_RELEASE=14.04
+#       DISTRIB_ID=Ubuntu      DISTRIB_RELEASE=17.10
+
+
+function(get_os_release_info _vn_id _vn_version_id)
+    set(_var_id "")
+    set(_var_version_id "")
+
+    if("${_var_id}" STREQUAL "")
+        set(file_path "/etc/centos-release")
+        if(EXISTS "${file_path}")
+            # Example: CentOS release 6.9 (Final)
+            file(STRINGS "${file_path}" file_list LIMIT_COUNT 1)
+            list(GET file_list 0 file_line)
+
+            # Remove all parenthesized items.
+            string(REGEX REPLACE "\\([^)]+\\)" "" file_line "${file_line}")
+
+            # Extract start and end, discard optional "version" or "release"
+            string(REGEX MATCH "^([A-Za-z0-9_]+)( +(version|release))? +(.*)$" 
_dummy "${file_line}")
+            #                    1              2  3                    4
+
+            set(_var_id "${CMAKE_MATCH_1}")
+            set(_var_version_id "${CMAKE_MATCH_4}")
+        endif()
+    endif()
+
+    if("${_var_id}" STREQUAL "")
+        if(EXISTS "/usr/lib/os-release")
+            set(file_path "/usr/lib/os-release")
+        elseif(EXISTS "/etc/os-release")
+            set(file_path "/etc/os-release")
+        else()
+            set(file_path "")
+        endif()
+
+        if(NOT "${file_path}" STREQUAL "")
+            file(STRINGS "${file_path}" data_list REGEX "^(ID|VERSION_ID)=")
+
+            # Look for lines like "ID="..." and VERSION_ID="..."
+            foreach(_var ${data_list})
+                if("${_var}" MATCHES "^(ID)=(.*)$")
+                    set(_var_id "${CMAKE_MATCH_2}")
+                elseif("${_var}" MATCHES "^(VERSION_ID)=(.*)$")
+                    set(_var_version_id "${CMAKE_MATCH_2}")
+                endif()
+            endforeach()
+        endif()
+    endif()
+
+    if("${_var_id}" STREQUAL "")
+        set(file_path "/etc/lsb-release")
+        if(EXISTS "${file_path}")
+            file(STRINGS "${file_path}" data_list REGEX 
"^(DISTRIB_ID|DISTRIB_RELEASE)=")
+
+            # Look for lines like "DISTRIB_ID="..." and DISTRIB_RELEASE="..."
+            foreach(_var ${data_list})
+                if("${_var}" MATCHES "^(DISTRIB_ID)=(.*)$")
+                    set(_var_id "${CMAKE_MATCH_2}")
+                elseif("${_var}" MATCHES "^(DISTRIB_RELEASE)=(.*)$")
+                    set(_var_version_id "${CMAKE_MATCH_2}")
+                endif()
+            endforeach()
+        endif()
+    endif()
+
+    string(TOLOWER "${_var_id}" "_var_id")
+
+    string(STRIP "${_var_id}" _var_id)
+    string(STRIP "${_var_version_id}" _var_version_id)
+
+    # Remove any enclosing quotation marks
+    string(REGEX REPLACE "^\"(.*)\"$" "\\1" _var_id "${_var_id}")
+    string(REGEX REPLACE "^\"(.*)\"$" "\\1" _var_version_id 
"${_var_version_id}")
+
+    if(NOT "${_vn_id}" STREQUAL "")
+        set(${_vn_id} "${_var_id}" PARENT_SCOPE)
+    endif()
+
+    if(NOT "${_vn_version_id}" STREQUAL "")
+        set(${_vn_version_id} "${_var_version_id}" PARENT_SCOPE)
+    endif()
+
+endfunction()
+
+
+endif(NOT DEFINED _os_release_info)
diff --git a/ctest/CMakeLists.txt b/ctest/CMakeLists.txt
--- a/ctest/CMakeLists.txt
+++ b/ctest/CMakeLists.txt
@@ -1,7 +1,16 @@
+#[[
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
+#]]
+
 if(BUILD_TESTING)
   add_test(NAME TestEcho
     COMMAND ${CMAKE_COMMAND} -E echo 'MonetDB Testing')
 
+  add_subdirectory(cmake)
   add_subdirectory(monetdb5)
   add_subdirectory(tools)
 endif()
diff --git a/ctest/cmake/CMakeLists.txt b/ctest/cmake/CMakeLists.txt
new file mode 100644
--- /dev/null
+++ b/ctest/cmake/CMakeLists.txt
@@ -0,0 +1,107 @@
+#[[
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
+#]]
+
+project(MonetDB-unittest LANGUAGES C)
+
+include(os_release_info)
+
+if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+  get_os_release_info(LINUX_DISTRO LINUX_DISTRO_VERSION)
+endif()
+
+if (${LINUX_DISTRO} STREQUAL "debian")
+  if(${LINUX_DISTRO_VERSION} STREQUAL "9")
+    set(DETECT "1")
+    set(UNDETECT "0")
+  endif()
+  if(${LINUX_DISTRO_VERSION} STREQUAL "10")
+    set(DETECT "1")
+    set(UNDETECT "0")
+  endif()
+elseif (${LINUX_DISTRO} STREQUAL "ubuntu")
+  if(${LINUX_DISTRO_VERSION} STREQUAL "18")
+    set(DETECT "1")
+    set(UNDETECT "0")
+  endif()
+  if(${LINUX_DISTRO_VERSION} STREQUAL "19")
+    set(DETECT "1")
+    set(UNDETECT "0")
+  endif()
+  if(${LINUX_DISTRO_VERSION} STREQUAL "20")
+    set(DETECT "1")
+    set(UNDETECT "0")
+  endif()
+elseif(${LINUX_DISTRO} STREQUAL "fedora")
+  if(${LINUX_DISTRO_VERSION} STREQUAL "30")
+    set(DETECT "0")
+    set(UNDETECT "1")
+  endif()
+  if(${LINUX_DISTRO_VERSION} STREQUAL "31")
+    set(DETECT "0")
+    set(UNDETECT "1")
+  endif()
+else()
+  message(ERROR "Linux distro: ${LINUX_DISTRO} not known")
+  message(ERROR "Linux distro version: ${LINUX_DISTRO_VERSION} not known")
+endif()
+
+configure_file(test_detect_lzma.c.in
+  ${CMAKE_CURRENT_BINARY_DIR}/test_detect_lzma.c
+  @ONLY)
+
+add_executable(test_detect test_detect.c)
+target_link_libraries(test_detect
+  PRIVATE
+  monetdb_config_header)
+add_test(testDetect test_detect)
+
+add_executable(test_detect_pcre test_detect_pcre.c)
+target_link_libraries(test_detect_pcre
+  PRIVATE
+  monetdb_config_header)
+add_test(testDetectPcre test_detect_pcre)
+
+add_executable(test_detect_bz2 test_detect_bz2.c)
+target_link_libraries(test_detect_bz2
+  PRIVATE
+  monetdb_config_header)
+add_test(testDetectBz2 test_detect_bz2)
+
+add_executable(test_detect_curl test_detect_curl.c)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to