X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/f3de2dbaf657f9040a4da448c57267de0fef7d33..0123ce7171b09ead5a07567fbd33c53f609f6560:/CMake/Misc.cmake diff --git a/CMake/Misc.cmake b/CMake/Misc.cmake index 584a4da2a..82cb4da37 100644 --- a/CMake/Misc.cmake +++ b/CMake/Misc.cmake @@ -4,7 +4,7 @@ include(CheckCXXCompilerFlag) function(flatify target headers) foreach(header ${headers}) get_filename_component(tgt ${header} NAME) - configure_file(${header} ${target}/${tgt} @ONLY) + configure_file(${header} ${target}/${tgt} COPYONLY) endforeach(header ${headers}) endfunction() @@ -24,16 +24,30 @@ function(add_vendor_file) set(oneValueArgs OUTPUT INPUT MODE) set(multiValueArgs VARIABLES) cmake_parse_arguments(AVF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - message(STATUS "Configuring vendor file ${AVF_OUTPUT}") - FILE(READ ${CMAKE_CURRENT_SOURCE_DIR}/${AVF_INPUT} input) - foreach(variable ${AVF_VARIABLES}) - execute_process(COMMAND ../vendor/getinfo ${variable} OUTPUT_VARIABLE value OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE "&${variable};" "${value}" input "${input}") - endforeach() - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${AVF_OUTPUT} "${input}") + set(in ${CMAKE_CURRENT_SOURCE_DIR}/${AVF_INPUT}) + set(out ${CMAKE_CURRENT_BINARY_DIR}/${AVF_OUTPUT}) + + add_custom_command( + OUTPUT ${out} + COMMAND ${CMAKE_COMMAND} -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} + "-DVARS=${AVF_VARIABLES}" + -DCURRENT_VENDOR=${CURRENT_VENDOR} + -DIN=${in} + -DOUT=${out} + -P ${PROJECT_SOURCE_DIR}/CMake/vendor_substitute.cmake + COMMAND chmod ${AVF_MODE} ${out} + DEPENDS ${in} + ${PROJECT_SOURCE_DIR}/doc/apt-verbatim.ent + ${PROJECT_SOURCE_DIR}/vendor/${CURRENT_VENDOR}/apt-vendor.ent + ${PROJECT_SOURCE_DIR}/vendor/getinfo + ${PROJECT_SOURCE_DIR}/CMake/vendor_substitute.cmake + VERBATIM + ) - execute_process(COMMAND chmod ${AVF_MODE} ${CMAKE_CURRENT_BINARY_DIR}/${AVF_OUTPUT}) + # Woud like to use ${AVF_OUTPUT} as target name, but then ninja gets + # cycles. + add_custom_target(vendor-${AVF_OUTPUT} ALL DEPENDS ${out}) endfunction() # Add symbolic links to a file @@ -63,3 +77,25 @@ function(add_version_script target) target_link_libraries(${target} PRIVATE -Wl,-version-script="${script}") add_dependencies(${target} ${target}-versionscript) endfunction() + +function(path_join out path1 path2) + string(SUBSTRING ${path2} 0 1 init_char) + if ("${init_char}" STREQUAL "/") + set(${out} "${path2}" PARENT_SCOPE) + else() + set(${out} "${path1}/${path2}" PARENT_SCOPE) + endif() +endfunction() + +# install_empty_directories(path ...) +# +# Creates empty directories in the install destination dir. Paths may be +# absolute or relative; in the latter case, the value of CMAKE_INSTALL_PREFIX +# is prepended. +function(install_empty_directories) + foreach(path ${ARGN}) + path_join(full_path "${CMAKE_INSTALL_PREFIX}" "${path}") + INSTALL(CODE "MESSAGE(STATUS \"Creating directory: \$ENV{DESTDIR}${full_path}\")" + CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${full_path})") + endforeach() +endfunction()