1define_property(GLOBAL PROPERTY LICENSE_TEXT
2 BRIEF_DOCS "Embedded licenses"
3 FULL_DOCS "Global string containing all aggregated licenses"
4)
5
6function(license_add_file NAME FILE)
7 if(NOT IS_ABSOLUTE "${FILE}")
8 set(FILE "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}")
9 endif()
10 if(EXISTS "${FILE}")
11 set(TITLE "License for ${NAME}")
12 string(REGEX REPLACE "." "=" UNDERLINE "${TITLE}")
13 file(READ "${FILE}" TEXT)
14 get_property(TMP GLOBAL PROPERTY LICENSE_TEXT)
15 string(APPEND TMP "R\"=L=(${TITLE}\n${UNDERLINE}\n\n${TEXT})=L=\",\n")
16 set_property(GLOBAL PROPERTY LICENSE_TEXT "${TMP}")
17 else()
18 message(WARNING "License file '${FILE}' not found")
19 endif()
20endfunction()
21
22function(license_generate TARGET_NAME)
23 message(STATUS "Generating embedded license file for target: ${TARGET_NAME}")
24 get_property(TEXT GLOBAL PROPERTY LICENSE_TEXT)
25
26 set(CPP_CONTENT "// Generated by CMake\n\n")
27 string(APPEND CPP_CONTENT "const char* LICENSES[] = {\n")
28 string(APPEND CPP_CONTENT "${TEXT}")
29 string(APPEND CPP_CONTENT "nullptr\n")
30 string(APPEND CPP_CONTENT "};\n")
31
32 set(CPP_FILE "${CMAKE_BINARY_DIR}/license.cpp")
33 file(WRITE "${CPP_FILE}" "${CPP_CONTENT}")
34
35 if(TARGET ${TARGET_NAME})
36 target_sources(${TARGET_NAME} PRIVATE "${CPP_FILE}")
37 else()
38 message(FATAL_ERROR "Target '${TARGET_NAME}' does not exist")
39 endif()
40endfunction()