File: CMakeLists.txt

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 (99 lines) | stat: -rw-r--r-- 4,278 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
99
# Fabricate our own copy of the install manifest, since the installation has not
# generated the final version yet at this point

# NOTE: The CODE installed by this script contains a work-around for a bug in
# CMake that results in empty directories being installed.  The work-around
# involves pruning the empty directories from the install tree before generating
# the uninstall program.  For non-Windows platforms, this requires a simple call
# to the 'find' utility.  For Windows platforms, however, some creative jumping
# through hoops is needed.  Specifically, a short batch script iterates through
# all directories in the install tree, calling 'rmdir' on each.  This removes
# empty directories only and warns for non-empty directories (which warnings are
# suppressed by the ERROR_QUIET option, since they are spurious for this use
# case).

set (UNINSTALL_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

if (WIN32)
   string (REPLACE "/" "\\\\" CMAKE_INSTALL_PREFIX_WIN32
      "${CMAKE_INSTALL_PREFIX}"
   )
   install (CODE "
      string (REPLACE \";\" \"\\n\" MONGOCXX_INSTALL_MANIFEST_CONTENT
         \"\${CMAKE_INSTALL_MANIFEST_FILES}\")
      string (REPLACE \"/\" \"\\\\\" MONGOCXX_INSTALL_MANIFEST_CONTENT_WIN32
         \"\${MONGOCXX_INSTALL_MANIFEST_CONTENT}\")
      file (WRITE \"mongocxx_install_manifest.txt\"
         \"\${MONGOCXX_INSTALL_MANIFEST_CONTENT_WIN32}\")
      execute_process (
         COMMAND
            ${CMAKE_COMMAND} -E env
            cmd.exe /c
            \" for /f \" delims= \" %d in ('dir ${CMAKE_INSTALL_PREFIX_WIN32} /s /b /ad ^| C:\\\\Windows\\\\System32\\\\sort.exe /r') do rmdir %d \"
         OUTPUT_QUIET
         ERROR_QUIET
      )
      execute_process (
         COMMAND
            ${CMAKE_COMMAND} -E env
            cmd.exe /c
            \"${PROJECT_SOURCE_DIR}/etc/generate-uninstall.cmd\"
            mongocxx_install_manifest.txt
            ${CMAKE_INSTALL_PREFIX_WIN32}
         OUTPUT_FILE
            \"${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}\"
      )
   ")
   install (FILES "${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}" DESTINATION "${UNINSTALL_PROG_DIR}" PERMISSIONS ${UNINSTALL_PERMISSIONS})

   add_custom_target (uninstall
      COMMAND "${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}"
   )
else ()
   install (CODE "
      string (REPLACE \";\" \"\\n\" MONGOCXX_INSTALL_MANIFEST_CONTENT
         \"\${CMAKE_INSTALL_MANIFEST_FILES}\")
      file (WRITE \"mongocxx_install_manifest.txt\"
         \"\${MONGOCXX_INSTALL_MANIFEST_CONTENT}\")
      execute_process (
         COMMAND
            find \"\$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/bsoncxx/v_noabi\" \"\$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/mongocxx/v_noabi\" -type d -empty -delete
      )
      execute_process (
         COMMAND
            ${CMAKE_COMMAND} -E env
            \"${PROJECT_SOURCE_DIR}/etc/generate-uninstall.sh\"
            mongocxx_install_manifest.txt
            ${CMAKE_INSTALL_PREFIX}
         OUTPUT_FILE
            \"${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}\"
      )

      # Ensure generated uninstall script has executable permissions.
      if (\"${CMAKE_VERSION}\" VERSION_GREATER_EQUAL \"3.19.0\")
         file (
            CHMOD \"${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}\"
            PERMISSIONS
                  OWNER_READ OWNER_WRITE OWNER_EXECUTE
                  GROUP_READ GROUP_EXECUTE
                  WORLD_READ WORLD_EXECUTE
         )
      else ()
         # Workaround lack of file(CHMOD).
         file (
            COPY \"${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}\"
            DESTINATION \"${UNINSTALL_PROG}.d\"
            FILE_PERMISSIONS
                  OWNER_READ OWNER_WRITE OWNER_EXECUTE
                  GROUP_READ GROUP_EXECUTE
                  WORLD_READ WORLD_EXECUTE
         )
         file (RENAME \"${UNINSTALL_PROG}.d/${UNINSTALL_PROG}\" \"${UNINSTALL_PROG}\")
      endif ()
   ")
   install (FILES "${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}" DESTINATION "${UNINSTALL_PROG_DIR}" PERMISSIONS ${UNINSTALL_PERMISSIONS})

   add_custom_target (uninstall
      COMMAND "${CMAKE_CURRENT_BINARY_DIR}/${UNINSTALL_PROG}"
   )
endif ()