On Freitag, 4. November 2016 09:34:46 CET you wrote:

> Would you be willing to also write a test for the SUGGESTS tag?
> The tests are located in Tests/RunCMake/CPack, you add the test to
> RunCMakeTest.cmake and for an example of a test similar to what you'd need
> to write you can search the CPack directory for all files containing
> PER_COMPONENT_FIELDS in their name.

I took the LONG_FILENAME test for deb packages as a template for the following 
patch. Is it more or less what you had in mind?

Alexander
diff --git a/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-ExpectedFiles.cmake b/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-ExpectedFiles.cmake
new file mode 100644
index 0000000..e714884
--- /dev/null
+++ b/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-ExpectedFiles.cmake
@@ -0,0 +1,5 @@
+set(whitespaces_ "[\t\n\r ]*")
+
+set(EXPECTED_FILES_COUNT "1")
+set(EXPECTED_FILE_1 "suggested*.rpm")
+set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/foo/${whitespaces_}.*/usr/foo/suggested.txt$")
diff --git a/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-Prerequirements.cmake b/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-Prerequirements.cmake
new file mode 100644
index 0000000..af4285d
--- /dev/null
+++ b/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-Prerequirements.cmake
@@ -0,0 +1,21 @@
+function(get_test_prerequirements found_var)
+  find_program(RPMBUILD_EXECUTABLE NAMES rpmbuild)
+  find_program(RPM_EXECUTABLE NAMES rpm)
+
+  if(RPMBUILD_EXECUTABLE AND RPM_EXECUTABLE)
+    execute_process(COMMAND         ${RPMBUILD_EXECUTABLE} --querytags
+                    OUTPUT_VARIABLE RPMBUILD_CAPS
+                    RESULT_VARIABLE RPMBUILD_CAPS_RESULT)
+
+    if(RPMBUILD_CAPS_RESULT)
+      string(REPLACE "\n" " " RPMBUILD_CAPS_LINE ${RPMBUILD_CAPS})
+      set(RPMBUILD_CAPS_LINE " ${RPMBUILD_CAPS_LINE}")
+
+      string(FIND "${RPMBUILD_CAPS_LINE}" " SUGGESTS " RPMBUILD_HAS_SUGGESTS)
+
+      if(RPMBUILD_HAS_SUGGESTS)
+        set(${found_var} true PARENT_SCOPE)
+      endif()
+    endif()
+  endif()
+endfunction()
diff --git a/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-VerifyResult.cmake b/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-VerifyResult.cmake
new file mode 100644
index 0000000..046e2d3
--- /dev/null
+++ b/Tests/RunCMake/CPack/RPM/RPM_SUGGESTS-VerifyResult.cmake
@@ -0,0 +1,10 @@
+execute_process(COMMAND         ${RPM_EXECUTABLE} -q --suggests -p ${FOUND_FILE_1}
+                RESULT_VARIABLE rpm_result_
+                OUTPUT_VARIABLE rpm_output_
+                OUTPUT_QUIET)
+
+string(FIND "${rpm_output_}" "suggested" HAS_SUGGESTED)
+
+if(NOT (rpm_result_ AND HAS_SUGGESTED))
+  message(FATAL_ERROR "RPM_SUGGESTED package error: no suggested packages"
+endif()
diff --git a/Tests/RunCMake/CPack/RPM_SUGGESTS.cmake b/Tests/RunCMake/CPack/RPM_SUGGESTS.cmake
new file mode 100644
index 0000000..1dd7e29
--- /dev/null
+++ b/Tests/RunCMake/CPack/RPM_SUGGESTS.cmake
@@ -0,0 +1,11 @@
+set(FILENAME
+  "${CMAKE_CURRENT_BINARY_DIR}/suggests_test.txt")
+
+file(WRITE
+  "${LONG_FILENAME}"
+  "suggests_test")
+
+install(FILES ${FILENAME} DESTINATION foo)
+
+set(CPACK_RPM_PACKAGE_SUGGESTS "libsuggested")
+set(CPACK_PACKAGE_NAME "suggested")
diff --git a/Tests/RunCMake/CPack/RunCMakeTest.cmake b/Tests/RunCMake/CPack/RunCMakeTest.cmake
index 474ee33..38bd0ea 100644
--- a/Tests/RunCMake/CPack/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake
@@ -15,6 +15,7 @@ run_cpack_test(CUSTOM_NAMES "RPM;DEB" true)
 run_cpack_test_subtests(MAIN_COMPONENT "invalid;found" "RPM" false)
 run_cpack_test(PER_COMPONENT_FIELDS "RPM;DEB" false)
 run_cpack_test(RPM_DIST "RPM" false)
+run_cpack_test(RPM_SUGGESTS "RPM" false)
 run_cpack_test(INSTALL_SCRIPTS "RPM" false)
 run_cpack_test(DEB_GENERATE_SHLIBS "DEB" true)
 run_cpack_test(DEB_GENERATE_SHLIBS_LDCONFIG "DEB" true)
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers

Reply via email to