# В этом файле описаны действия для добавления init.d скрипта. Пока в разработке. # Данный файл нужно включать в CMakeLists.txt в каталоге каждого конкретного демона. # Пример использования: # INCLUDE( ${PROJECT_SOURCE_DIR}/tools/init.d/CMakeLists.init ) # CREATE_INIT_SCRIPT(divider Divider) # Будет создан init.d скрипт с названием divider для демона (бинарника) Divider # NB Тут _не_ используется add_custom_command. Это делается только потому, что # если её использовать, то у cmake сносит крышу, и она начинает путать цели и файлы. А # именно, начинает ругаться, что нет файла divider.cpp и нельзя собрать divider.cpp.o. # Опытным путём было установлено, что эта ошибка возникает из-за совпадения названия (без учёта расширения) # 'divider.cpp' и добавляемой custom command 'divider' (тот который init.d скрипт). Было найдено два пути решения: # - писать add_executable (Divider ${CMAKE_CURRENT_SOURCE_DIR}/divider.cpp ${SRCS}), т.е. явно указать, # где искать файлы для сборки Divider # - переименовать init.d-скрипт # Оба варианта накладывают странные ограничения, поэтому, учитывая, что само создание init.d файла весьма # недорого, было принято решение не использовать add_custom_command macro (CREATE_INIT_SCRIPT daemonname) set(filename ${daemonname}-metrika-yandex) # опционально принимаем filename вторым аргументом set(extra_args ${ARGN}) list(LENGTH extra_args num_extra_args) if (${num_extra_args} GREATER 0) list(GET extra_args 0 optional_arg) set(filename ${optional_arg}) endif() set(tmp_file_name ${filename}.init) set (SED_INPLACE_SUFFIX "") if (APPLE) set (SED_INPLACE_SUFFIX "''") endif () add_custom_target(${daemonname}-init.target ALL COMMAND sed -e 's,[@]DAEMON[@],${daemonname},g' < ${PROJECT_SOURCE_DIR}/tools/init.d/template > ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name} COMMAND sed -i ${SED_INPLACE_SUFFIX} 's,[@]CRONFILE[@],${filename},g' ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name} COMMAND chmod a+x ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name} COMMENT "Building ${daemonname}" ) INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name} DESTINATION /etc/init.d RENAME ${filename} PERMISSIONS OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ COMPONENT ${daemonname} ) add_dependencies(${daemonname} ${daemonname}-init.target) endmacro (CREATE_INIT_SCRIPT)