cpp-d1064d
[cross.git] / bin / load-dependency
1 #!/bin/bash
2 set -ex
3
4 # Konzept:
5 #   - Schiebe Paket in required.ld
6 #   - Schleife über Inhalt von required.ld
7 #     x Hole Paket
8 #     x Packe Abhängigkeiten des Pakets nach dependencies.ld
9 #   - Leere required.ld
10 #   - Schleife über dependencies.ld
11 #     x Ist Paket im Verzeichnis
12 #       ja: tunix
13 #       nein:
14 #         - Ist Paket in required.ld?
15 #           ja: tunix
16 #           nein: Füge Paket zu required.ld
17 #   - Ist required.ld leer?
18 #     ja: Ende
19 #     nein: springe nach oben
20
21 usage="load-dependency [PAKET | DEBFILE]"
22
23 function get_deb_name {
24         pkg=$1
25         deb_name=$(ls ${pkg}_*.deb || true) 2>/dev/null
26 }
27
28 # Lösche Hilfsdateien
29 rm dependencies.ld required.ld || true 2>/dev/null
30
31 # Prüfe Parameter
32 if [ -n "$1" ]
33 then
34         if [ "${1##*.}" == "deb" ]
35         then
36                 # prüfe deb
37                 dpkg-deb -I $1 |grep "Depends:" |sed "s/Depends://" |tr ',' '\n' >> dependencies.ld
38         else
39                 # Schiebe Paket in required.ld
40                 echo "$1" >required.ld
41         fi
42 else
43         echo "Prüfung aller deb files noch nicht implementiert."
44         exit 1
45 fi
46
47 while true
48 do
49         if [ -f required.ld ]
50         then
51                 # Schleife über Inhalt von required.ld
52                 rm dependencies.ld || true 2>/dev/null
53                 while read reqline
54                 do
55                         # Hole Paket
56                         pkg_version=$(echo $reqline |sed "s/ (//" |sed "s/= /=/" |sed "s/)//" |sed "s/>.*//")
57                         apt-get download $pkg_version
58                         
59                         # Packe Abhängigkeiten des Pakets nach dependencies.ld
60                         pkg=${pkg_version##=*}
61                         get_deb_name $pkg
62                         dpkg-deb -I $deb_name |grep "Depends:" |sed "s/Depends://" |tr ',' '\n' >> dependencies.ld
63                 done <required.ld
64         fi
65
66         # Leere required.ld
67         rm required.ld || true 2>/dev/null
68
69         # Schleife über dependencies.ld
70         while read depline
71         do
72                 # Ist Paket im Verzeichnis
73                 pkg=$depline
74                 get_deb_name $pkg
75                 if [ -z "$deb_name" ]
76                 then 
77                         # nein:
78                         # Ist Paket in required.ld?
79                         if ! grep "${pkg}_" required.ld 1>/dev/null
80                         then
81                                 # nein: Füge Paket zu required.ld
82                                 echo $depline >>required.ld
83                         fi
84                 fi
85         done <dependencies.ld
86
87         # Ist required.ld leer?
88         if [ ! -f required.ld ]
89         then
90                 # ja: Ende
91                 echo "finished."
92                 exit
93         fi
94         #     nein: springe nach oben
95 done
96
97