2008-12-08 06:42:56 +00:00
|
|
|
|
# В этом файле описаны действия для добавления init.d скрипта. Пока в разработке.
|
|
|
|
|
# Данный файл нужно включать в CMakeLists.txt в каталоге каждого конкретного демона.
|
|
|
|
|
# Пример использования:
|
2008-12-10 04:36:24 +00:00
|
|
|
|
# INCLUDE( ${PROJECT_SOURCE_DIR}/tools/init.d/CMakeLists.init )
|
|
|
|
|
# CREATE_INIT_SCRIPT(divider Divider)
|
|
|
|
|
# Будет создан init.d скрипт с названием divider для демона (бинарника) Divider
|
2008-12-08 06:42:56 +00:00
|
|
|
|
|
2008-12-11 12:37:09 +00:00
|
|
|
|
# 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
|
|
|
|
|
|
2014-01-09 13:37:19 +00:00
|
|
|
|
macro (CREATE_INIT_SCRIPT daemonname)
|
2014-09-11 12:37:30 +00:00
|
|
|
|
|
2014-09-12 10:37:18 +00:00
|
|
|
|
set(filename ${daemonname}-metrika-yandex)
|
2014-09-11 12:37:30 +00:00
|
|
|
|
|
2014-09-12 10:37:18 +00:00
|
|
|
|
# опционально принимаем filename вторым аргументом
|
2014-09-11 12:37:30 +00:00
|
|
|
|
set(extra_args ${ARGN})
|
|
|
|
|
list(LENGTH extra_args num_extra_args)
|
|
|
|
|
if (${num_extra_args} GREATER 0)
|
|
|
|
|
list(GET extra_args 0 optional_arg)
|
2014-09-12 10:37:18 +00:00
|
|
|
|
set(filename ${optional_arg})
|
2014-09-11 12:37:30 +00:00
|
|
|
|
endif()
|
2014-09-12 10:37:18 +00:00
|
|
|
|
set(tmp_file_name ${filename}.init)
|
2014-09-11 12:37:30 +00:00
|
|
|
|
|
2016-11-02 09:29:39 +00:00
|
|
|
|
set (SED_INPLACE_SUFFIX "")
|
|
|
|
|
if (APPLE)
|
|
|
|
|
set (SED_INPLACE_SUFFIX "''")
|
|
|
|
|
endif ()
|
2014-01-09 13:44:40 +00:00
|
|
|
|
add_custom_target(${daemonname}-init.target ALL
|
2014-09-12 10:37:18 +00:00
|
|
|
|
COMMAND sed -e 's,[@]DAEMON[@],${daemonname},g' < ${PROJECT_SOURCE_DIR}/tools/init.d/template > ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name}
|
2016-11-02 09:29:39 +00:00
|
|
|
|
COMMAND sed -i ${SED_INPLACE_SUFFIX} 's,[@]CRONFILE[@],${filename},g' ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name}
|
2014-09-12 10:37:18 +00:00
|
|
|
|
COMMAND chmod a+x ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name}
|
2014-01-09 13:37:19 +00:00
|
|
|
|
COMMENT "Building ${daemonname}"
|
2008-12-08 06:42:56 +00:00
|
|
|
|
)
|
2008-12-10 04:36:24 +00:00
|
|
|
|
INSTALL(
|
2014-09-12 10:37:18 +00:00
|
|
|
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/${tmp_file_name}
|
2008-12-10 04:36:24 +00:00
|
|
|
|
DESTINATION /etc/init.d
|
2014-09-12 10:37:18 +00:00
|
|
|
|
RENAME ${filename}
|
2008-12-10 04:36:24 +00:00
|
|
|
|
PERMISSIONS OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ
|
2015-04-15 08:18:24 +00:00
|
|
|
|
COMPONENT ${daemonname}
|
2008-12-10 04:36:24 +00:00
|
|
|
|
)
|
2015-04-15 10:39:45 +00:00
|
|
|
|
|
|
|
|
|
add_dependencies(${daemonname} ${daemonname}-init.target)
|
|
|
|
|
|
2008-12-08 06:42:56 +00:00
|
|
|
|
endmacro (CREATE_INIT_SCRIPT)
|