]> git.saurik.com Git - apt.git/blobdiff - CMake/Misc.cmake
CMake: Add missing iconv dependency
[apt.git] / CMake / Misc.cmake
index 584a4da2a34326383ace615d9bc6cdc23a63dbdd..82cb4da3731401f603f68f487d5bc13e5b98a200 100644 (file)
@@ -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()