/usr/lib/pd/extra/deken-xtra-apt-plugin/deken-xtra-apt-plugin.tcl is in pd-deken-apt 0.2.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | # META NAME PdExternalsSearch
# META DESCRIPTION Search for externals Debian-packages via apt
# META AUTHOR IOhannes m zmölnig <zmoelnig@iem.at>
# ex: set setl sw=2 sts=2 et
# Search URL:
# http://puredata.info/search_rss?SearchableText=xtrnl-
# The minimum version of TCL that allows the plugin to run
package require Tcl 8.4
## ####################################################################
## searching apt (if available)
namespace eval ::deken::apt {
namespace export search
namespace export install
variable distribution
}
proc ::deken::apt::search {name} {
set result []
if { [info exists ::deken::apt::distribution] } { } {
if { [ catch { exec lsb_release -si } ::deken::apt::distribution ] } {
set ::deken::apt::distribution {}
}
}
if { "$::deken::apt::distribution" == "" } {
return
}
set name [ string tolower $name ]
array unset pkgs
array set pkgs {}
set _dpkg_query {dpkg-query -W -f ${db:Status-Abbrev}${Version}\n}
set filter "-F Provides pd-externals --or -F Depends -w pd --or -F Depends -w puredata --or -F Depends -w puredata-core"
if { "$name" == "" } { } {
set filter " -F Package $name --and ( $filter )"
}
set io [ open "|grep-aptavail -n -s Package $filter | sort -u | xargs apt-cache madison" r ]
while { [ gets $io line ] >= 0 } {
#puts $line
set llin [ split "$line" "|" ]
set pkgname [ string trim [ lindex $llin 0 ] ]
#if { $pkgname ne $searchname } { continue }
set ver_ [ string trim [ lindex $llin 1 ] ]
set info_ [ string trim [ lindex $llin 2 ] ]
## status: is the package installed?
set state "Provided"
catch {
set io2 [ open "|${_dpkg_query} ${pkgname} | egrep ^ii | egrep ${ver_}$" ]
if { [ gets $io2 _ ] >= 0 } {
set state "Already installed"
} {
while { [ gets $io2 _ ] >= 0 } { }
}
}
if { "Packages" eq [ lindex $info_ end ] } {
set suite [ lindex $info_ 1 ]
set arch [ lindex $info_ 2 ]
if { ! [ info exists pkgs($pkgname/$ver_) ] } {
set pkgs($pkgname/$ver_) [ list $pkgname $ver_ $suite $arch $state]
}
}
}
foreach {name inf} [ array get pkgs ] {
set pkgname [ lindex $inf 0 ]
set v [ lindex $inf 1 ]
set suite [ lindex $inf 2 ]
set arch [ lindex $inf 3 ]
set state [ lindex $inf 4 ]
set cmd "::deken::apt::install ${pkgname}=$v"
set match 1
set comment "${state} by ${::deken::apt::distribution} (${suite})"
set status "${pkgname}_${v}_${arch}.deb"
lappend result [list $name $cmd $match $comment $status]
}
return [lsort -dictionary -decreasing -index 1 $result ]
}
proc ::deken::apt::install {pkg} {
set desc deken::apt
set prog "apt-get install -y --show-progress ${pkg}"
if { [ catch { exec which pkexec } sudo ] } {
if { [ catch { exec which gksudo } sudo ] } {
set sudo ""
} { set sudo "$sudo -D $desc --"
}
}
if { $sudo == "" } {
::deken::post "Please install 'policykit-1', if you want to install system packages via deken..." error
} {
# for whatever reasons, we cannot have 'deken' as the description
# (it will always show $prog instead)
set cmdline "$sudo $prog"
#::deken::post "$cmdline" error
set io [ open "|${cmdline}" ]
while { [ gets $io line ] >= 0 } {
::deken::post "apt: $line"
}
if { [ catch { close $io } ret ] } {
::deken::post "apt::install failed to install $pkg" error
::deken::post "\tDid you provide the correct password and/or" error
::deken::post "\tis the apt database locked by another process?" error
}
}
}
proc ::deken::apt::register { } {
if { [ catch { exec apt-cache madison } _ ] } { } {
if { [ catch { exec which grep-aptavail } _ ] } { } {
if { [ catch {
::deken::register ::deken::apt::search
} ] } {
::pdwindow::debug "Not using APT-backend for unavailable deken\n"
} {
return 1
}
}}
return 0
}
if { [::deken::apt::register] } {
::pdwindow::debug "Using APT as additional deken backend\n"
}
|