File: MakeDistCheck.cmake

package info (click to toggle)
mongo-cxx-driver 4.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 13,832 kB
  • sloc: cpp: 61,365; python: 1,436; sh: 356; xml: 253; perl: 215; makefile: 21
file content (98 lines) | stat: -rw-r--r-- 2,969 bytes parent folder | download
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
include(MakeDistFiles)

function(RUN_DIST_CHECK PACKAGE_PREFIX EXT)
   set(tarball ${PACKAGE_PREFIX}.tar${EXT})

   if(NOT EXISTS ${tarball})
      message(FATAL_ERROR "Can't find dist tarball '${tarball}'")
   endif()

   # Remove the directory to which we're about to extract
   file(REMOVE_RECURSE ${PACKAGE_PREFIX})

   # Untar the distribution we want to check
   set(TAR_OPTION "zxf")

   if(${EXT} STREQUAL ".bz2")
      set(TAR_OPTION "jxf")
   endif()

   execute_process_and_check_result(
      COMMAND ${CMAKE_COMMAND} -E tar ${TAR_OPTION} ${tarball}
      WORKING_DIRECTORY .
      ERROR_MSG "Command to untar ${tarball} failed."
   )

   # Ensure a VERSION_CURRENT file is present.
   if(MONGOCXX_INCLUDE_VERSION_FILE_IN_DIST AND NOT EXISTS ${PACKAGE_PREFIX}/build/VERSION_CURRENT)
      message (FATAL_ERROR "Expected tarball to contain a `build/VERSION_CURRENT` file, but it does not")
   endif ()

   set(BUILD_DIR "_cmake_build")
   set(INSTALL_DIR "_cmake_install")
   file(REMOVE_RECURSE ${BUILD_DIR} ${INSTALL_DIR})

   file(MAKE_DIRECTORY ${BUILD_DIR} ${INSTALL_DIR})

   # Ensure distcheck inherits polyfill library selection.
   set(polyfill_flags "")

   if(NOT "${CMAKE_CXX_STANDARD}" STREQUAL "")
      list(APPEND polyfill_flags "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
   endif()

   if(NOT "${BSONCXX_POLY_USE_IMPLS}" STREQUAL "")
      list(APPEND polyfill_flags "-DBSONCXX_POLY_USE_IMPLS=${BSONCXX_POLY_USE_IMPLS}")
   endif()

   if(NOT "${BSONCXX_POLY_USE_STD}" STREQUAL "")
      list(APPEND polyfill_flags "-DBSONCXX_POLY_USE_STD=${BSONCXX_POLY_USE_STD}")
   endif()

   execute_process_and_check_result(
      COMMAND ${CMAKE_COMMAND} -E echo "Configuring distcheck with CMake flags: ${polyfill_flags}"
      WORKING_DIRECTORY .
      ERROR_MSG "Failed to echo polyfill flags"
   )

   execute_process_and_check_result(
      COMMAND ${CMAKE_COMMAND}
         -S ../${PACKAGE_PREFIX}
         -B .
         -DCMAKE_BUILD_TYPE=Release
         -DENABLE_TESTS=ON
         -DMONGOCXX_ENABLE_SLOW_TESTS=ON
         -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
         -DCMAKE_INSTALL_PREFIX=../${INSTALL_DIR}
         ${polyfill_flags}

      WORKING_DIRECTORY ${BUILD_DIR}
      ERROR_MSG "CMake configure command failed."
   )

   # Run make in the build directory
   separate_arguments(build_opts)
   execute_process_and_check_result(
      COMMAND ${CMAKE_COMMAND} --build .
      WORKING_DIRECTORY ${BUILD_DIR}
      ERROR_MSG "Make build failed."
   )

   # Run make install
   execute_process_and_check_result(
      COMMAND ${CMAKE_COMMAND} --build . --target install
      WORKING_DIRECTORY ${BUILD_DIR}
      ERROR_MSG "Make install failed."
   )

   # Run make dist
   execute_process_and_check_result(
      COMMAND ${CMAKE_COMMAND} --build . --target dist
      WORKING_DIRECTORY ${BUILD_DIR}
      ERROR_MSG "Make dist failed."
   )

   message("distcheck complete.")
endfunction()

run_dist_check(${PACKAGE_PREFIX} .gz)