license.cmake 1.4 KB

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