gremlin: 'elf-dynamic-info' returns a file name rathern than a dynamic entry.
* guix/build/gremlin.scm (elf-dynamic-info): Return the dynamic entry
value, not the dynamic entry.
* tests/gremlin.scm ("elf-dynamic-info-soname"): New test.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
			
			
This commit is contained in:
		
							parent
							
								
									a24562af52
								
							
						
					
					
						commit
						1010171280
					
				
					 2 changed files with 21 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -226,7 +226,9 @@ string table if the type is a string."
 | 
			
		|||
    (#f #f)
 | 
			
		||||
    ((? elf-segment? dynamic)
 | 
			
		||||
     (let ((entries (dynamic-entries elf dynamic)))
 | 
			
		||||
       (%elf-dynamic-info (find (matching-entry DT_SONAME) entries)
 | 
			
		||||
       (%elf-dynamic-info (and=> (find (matching-entry DT_SONAME)
 | 
			
		||||
                                       entries)
 | 
			
		||||
                                 dynamic-entry-value)
 | 
			
		||||
                          (filter-map (lambda (entry)
 | 
			
		||||
                                        (and (= (dynamic-entry-type entry)
 | 
			
		||||
                                                DT_NEEDED)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -160,4 +160,22 @@
 | 
			
		|||
                (close-pipe pipe)
 | 
			
		||||
                str)))))))
 | 
			
		||||
 | 
			
		||||
(unless c-compiler
 | 
			
		||||
  (test-skip 1))
 | 
			
		||||
(test-equal "elf-dynamic-info-soname"
 | 
			
		||||
  "libfoo.so.2"
 | 
			
		||||
  (call-with-temporary-directory
 | 
			
		||||
   (lambda (directory)
 | 
			
		||||
     (with-directory-excursion directory
 | 
			
		||||
       (call-with-output-file "t.c"
 | 
			
		||||
         (lambda (port)
 | 
			
		||||
           (display "// empty file" port)))
 | 
			
		||||
       (invoke c-compiler "t.c"
 | 
			
		||||
               "-shared" "-Wl,-soname,libfoo.so.2")
 | 
			
		||||
       (let* ((dyninfo (elf-dynamic-info
 | 
			
		||||
                       (parse-elf (call-with-input-file "a.out"
 | 
			
		||||
                                    get-bytevector-all))))
 | 
			
		||||
              (soname  (elf-dynamic-info-soname dyninfo)))
 | 
			
		||||
	 soname)))))
 | 
			
		||||
 | 
			
		||||
(test-end "gremlin")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue