Search code examples
cmakecpack

CMake - how to block executing installation scripts during packaging?


My CMakeLists.txt file contains commands, which should be executed by make install, and all this works fine. The sample CMakeLists.txt below is a short excerpt from my actual CMake file (the tm0001.cpp content is not important here - it might be any C++ program):

cmake_minimum_required(VERSION 3.12)

project(tm0001)

set(CMAKE_CXX_STANDARD 11)
add_executable(${PROJECT_NAME} tm0001.cpp)

install(
  TARGETS ${PROJECT_NAME}
  DESTINATION /usr/local/bin
  PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)

install(CODE "message(\"-- This must be called during installation only\")")

set(CPACK_PACKAGE_CONTACT "HEKTO")
set(CPACK_GENERATOR "DEB")
include(CPack)

I see the message command is executed by make package as well, which is not I want.

How to tell CMake not to execute installation scripts by the make package command? I couldn't find any way to do that with the CMake if command.


Solution

  • I'm answering my own question, because the existing answer doesn't address my main problem. I couldn't find any way (on the CMake level) to block install commands from running during make package - even the postinst script is called by this command.

    Fortunately, I could modify the postinst script itself to do nothing in case it's called not by the dpkg:

    if [ -z ${DPKG_ADMINDIR} ]; then
      echo "postinst: missing 'dpkg' environment (not an error during packaging)"
      exit 0
    fi
    

    It's a trick of course, but it worked for me.