[81369] branches/gsoc11-post-destroot/base/src/port1.0/portcheckdestroot. tcl
fotanus at macports.org
fotanus at macports.org
Fri Jul 29 17:35:14 PDT 2011
Revision: 81369
http://trac.macports.org/changeset/81369
Author: fotanus at macports.org
Date: 2011-07-29 17:35:11 -0700 (Fri, 29 Jul 2011)
Log Message:
-----------
Implemented multiple granularity for whitelist
now it works as files and folders.
also, the code was cleaned up
Modified Paths:
--------------
branches/gsoc11-post-destroot/base/src/port1.0/portcheckdestroot.tcl
Modified: branches/gsoc11-post-destroot/base/src/port1.0/portcheckdestroot.tcl
===================================================================
--- branches/gsoc11-post-destroot/base/src/port1.0/portcheckdestroot.tcl 2011-07-30 00:24:42 UTC (rev 81368)
+++ branches/gsoc11-post-destroot/base/src/port1.0/portcheckdestroot.tcl 2011-07-30 00:35:11 UTC (rev 81369)
@@ -68,9 +68,7 @@
} else {
#is from the correct type
if { $bin } {
- if { [binary? $item] } {
- lappend ret $item
- }
+ lappend ret $item
} else {
lappend ret $item
}
@@ -218,86 +216,76 @@
}
}
- # Check for dynamic links that aren't in the dependency list
- proc portcheckdestroot::checkdestroot_libs {} {
- global destroot prefix UI_PREFIX subport
- ui_notice "$UI_PREFIX Checking for wrong dynamic links"
+# Check for dynamic links that aren't in the dependency list
+proc portcheckdestroot::checkdestroot_libs {} {
+ global destroot prefix UI_PREFIX subport
+ ui_notice "$UI_PREFIX Checking for wrong dynamic links"
- #Folders that don't need to be alerted if not on dependencies.
- #TODO: Compile whitelist folders
- set dep_whitelist {/usr/lib/ /System/Library/ /lib/}
+ #Folders that don't need to be alerted if not on dependencies.
+ set files_whitelist {libSystem.B.dylib}
+ set folders_whitelist {/System/Library}
- #Get dependencies files list.
- set dep_files {}
- foreach dep [get_dependencies] {
- lappend dep_files [file tail [registry_port_registered $dep]]
- }
- set self_files [bin_list $destroot$prefix]
- set dep_files [concat $dep_files $self_files]
+ #Get dependencies files list.
+ set dep_files {}
+ foreach dep [get_dependencies] {
+ lappend dep_files [file tail [registry_port_registered $dep]]
+ }
+ set self_files [bin_list $destroot$prefix]
+ set dep_files [concat $dep_files $self_files]
- #Get package files
- foreach file [files_list $destroot] {
- foreach file_lib [list_dlibs $file] {
- if { ! [regexp $file_lib $file] } {
+ #Get package files
+ foreach file [files_list $destroot] {
+ foreach file_lib [list_dlibs $file] {
+ set valid_lib 0
+ if { [regexp $file_lib $file] } {
+ set valid_lib 1
+ }
+ if { ! $valid_lib } {
if { [lsearch $dep_files $file_lib] != -1 } {
+ set valid_lib 1
ui_debug "$file_lib binary dependency is met"
- } else {
- #match file folder agains whitelist
- set found 0
- foreach dep $dep_whitelist {
- if { [regexp "^$dep" [regsub $prefix $file_lib ""]] } {
- set found 1
- break
- }
+ }
+ }
+ if { ! $valid_lib } {
+ foreach dep_file $files_whitelist {
+ if { [regexp $dep_file [regsub ".*/" $file_lib ""]] } {
+ ui_debug "$file_lib binary dependency folder is on whitelist"
+ set valid_lib 1
+ break
}
- if { $found } {
+ }
+ }
+ if { ! $valid_lib } {
+ foreach dep_folder $folders_whitelist {
+ if { [regexp "^$dep" [regsub $prefix $file_lib ""]] } {
ui_debug "$file_lib binary dependency folder is on whitelist"
- } else {
- return -code error "$file_lib binary dependencies are NOT met"
+ set valid_lib 1
+ break
}
}
}
- }
- }
-}
-
-#For the given archs, check if the files from destroot are compatible
-proc portcheckdestroot::checkdestroot_arches { archs } {
- global destroot
- foreach file [files_list $destroot] {
- set file_archs [list_archs $file]
- foreach arch $file_archs {
- if { [lsearch $arch $archs] == -1 } {
- return -code error "$file supports the arch $arch, and should not"
+ if { ! $valid_lib } {
+ return -code error "$file_lib binary dependencies are NOT met"
}
}
}
}
-# Recover the arches from a file, from it's lipo output. For internal use only.
-proc portcheckdestroot::get_lipo_arches { file } {
- if { [ catch { set lipo_output [exec lipo -info $file 2>/dev/null] } ] } {
- return "ignore"
- }
- return [regsub "Architectures in the.*are:" $lipo_output ""]
-}
-
-# Recover the arches from a file, from it's lipo output. For internal use only.
-proc portcheckdestroot::get_otool_libs { file } {
- if { [ catch { set output [exec -keepnewline otool -L $file 2>/dev/null] } ] } {
- return "ignore"
- }
- return [split $output "\n"]
-}
-
# Check for arch constraints
proc portcheckdestroot::checkdestroot_arch {} {
- global UI_PREFIX
+ global UI_PREFIX destroot
ui_notice "$UI_PREFIX Checking for archs"
set archs [get_canonical_archs]
if { "archs" != "noarch" } {
- checkdestroot_arches $archs
+ foreach file [files_list $destroot] {
+ set file_archs [list_archs $file]
+ foreach arch $file_archs {
+ if { [lsearch $arch $archs] == -1 } {
+ return -code error "$file supports the arch $arch, and should not"
+ }
+ }
+ }
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20110729/4e4cfd1e/attachment.html>
More information about the macports-changes
mailing list