Browse Source

Create CMake.ELF test to cover cmELF further

This commit adds a CMake.ELF test to exercise cmELF and file(RPATH_*).
We test all combinations of 32/64-bit and LSB/MSB binaries.
Brad King 16 years ago
parent
commit
23bdb28cad

+ 4 - 0
Tests/CMakeTests/CMakeLists.txt

@@ -27,6 +27,10 @@ AddCMakeTest(String "")
 AddCMakeTest(Math "")
 AddCMakeTest(CMakeMinimumRequired "")
 
+if(HAVE_ELF_H)
+  AddCMakeTest(ELF "")
+endif()
+
 SET(EndStuff_PreArgs
   "-Ddir:STRING=${CMAKE_CURRENT_BINARY_DIR}/EndStuffTest"
   )

BIN
Tests/CMakeTests/ELF/elf32lsb.bin


BIN
Tests/CMakeTests/ELF/elf32msb.bin


BIN
Tests/CMakeTests/ELF/elf64lsb.bin


BIN
Tests/CMakeTests/ELF/elf64msb.bin


+ 48 - 0
Tests/CMakeTests/ELFTest.cmake.in

@@ -0,0 +1,48 @@
+set(names
+  elf32lsb.bin
+  elf32msb.bin
+  elf64lsb.bin
+  elf64msb.bin
+  )
+
+# Prepare binaries on which to operate.
+set(in "@CMAKE_CURRENT_SOURCE_DIR@/ELF")
+set(out "@CMAKE_CURRENT_BINARY_DIR@/ELF-Out")
+file(REMOVE_RECURSE "${out}")
+file(MAKE_DIRECTORY "${out}")
+foreach(f ${names})
+  file(COPY ${in}/${f} DESTINATION ${out})
+  list(APPEND files "${out}/${f}")
+endforeach()
+
+foreach(f ${files})
+  # Check for the initial RPATH.
+  file(RPATH_CHECK FILE "${f}" RPATH "/sample/rpath")
+  if(NOT EXISTS "${f}")
+    message(FATAL_ERROR "RPATH_CHECK removed ${f}")
+  endif()
+
+  # Change the RPATH.
+  file(RPATH_CHANGE FILE "${f}"
+    OLD_RPATH "/sample/rpath"
+    NEW_RPATH "/rpath/sample")
+  set(rpath)
+  file(STRINGS "${f}" rpath REGEX "/rpath/sample" LIMIT_COUNT 1)
+  if(NOT rpath)
+    message(FATAL_ERROR "RPATH not changed in ${f}")
+  endif()
+
+  # Remove the RPATH.
+  file(RPATH_REMOVE FILE "${f}")
+  set(rpath)
+  file(STRINGS "${f}" rpath REGEX "/rpath/sample" LIMIT_COUNT 1)
+  if(rpath)
+    message(FATAL_ERROR "RPATH not removed from ${f}")
+  endif()
+
+  # Check again...this should remove the file.
+  file(RPATH_CHECK FILE "${f}" RPATH "/sample/rpath")
+  if(EXISTS "${f}")
+    message(FATAL_ERROR "RPATH_CHECK did not remove ${f}")
+  endif()
+endforeach()