cpp-d1064d
[cross.git] / bin / load-dependency
diff --git a/bin/load-dependency b/bin/load-dependency
new file mode 100755 (executable)
index 0000000..2c6781e
--- /dev/null
@@ -0,0 +1,97 @@
+#!/bin/bash
+set -ex
+
+# Konzept:
+#   - Schiebe Paket in required.ld
+#   - Schleife über Inhalt von required.ld
+#     x Hole Paket
+#     x Packe Abhängigkeiten des Pakets nach dependencies.ld
+#   - Leere required.ld
+#   - Schleife über dependencies.ld
+#     x Ist Paket im Verzeichnis
+#       ja: tunix
+#       nein:
+#         - Ist Paket in required.ld?
+#           ja: tunix
+#           nein: Füge Paket zu required.ld
+#   - Ist required.ld leer?
+#     ja: Ende
+#     nein: springe nach oben
+
+usage="load-dependency [PAKET | DEBFILE]"
+
+function get_deb_name {
+       pkg=$1
+       deb_name=$(ls ${pkg}_*.deb || true) 2>/dev/null
+}
+
+# Lösche Hilfsdateien
+rm dependencies.ld required.ld || true 2>/dev/null
+
+# Prüfe Parameter
+if [ -n "$1" ]
+then
+       if [ "${1##*.}" == "deb" ]
+       then
+               # prüfe deb
+               dpkg-deb -I $1 |grep "Depends:" |sed "s/Depends://" |tr ',' '\n' >> dependencies.ld
+       else
+               # Schiebe Paket in required.ld
+               echo "$1" >required.ld
+       fi
+else
+       echo "Prüfung aller deb files noch nicht implementiert."
+       exit 1
+fi
+
+while true
+do
+       if [ -f required.ld ]
+       then
+               # Schleife über Inhalt von required.ld
+               rm dependencies.ld || true 2>/dev/null
+               while read reqline
+               do
+                       # Hole Paket
+                       pkg_version=$(echo $reqline |sed "s/ (//" |sed "s/= /=/" |sed "s/)//" |sed "s/>.*//")
+                       apt-get download $pkg_version
+                       
+                       # Packe Abhängigkeiten des Pakets nach dependencies.ld
+                       pkg=${pkg_version##=*}
+                       get_deb_name $pkg
+                       dpkg-deb -I $deb_name |grep "Depends:" |sed "s/Depends://" |tr ',' '\n' >> dependencies.ld
+               done <required.ld
+       fi
+
+       # Leere required.ld
+       rm required.ld || true 2>/dev/null
+
+       # Schleife über dependencies.ld
+       while read depline
+       do
+               # Ist Paket im Verzeichnis
+               pkg=$depline
+               get_deb_name $pkg
+               if [ -z "$deb_name" ]
+               then 
+                       # nein:
+                       # Ist Paket in required.ld?
+                       if ! grep "${pkg}_" required.ld 1>/dev/null
+                       then
+                               # nein: Füge Paket zu required.ld
+                               echo $depline >>required.ld
+                       fi
+               fi
+       done <dependencies.ld
+
+       # Ist required.ld leer?
+       if [ ! -f required.ld ]
+       then
+               # ja: Ende
+               echo "finished."
+               exit
+       fi
+       #     nein: springe nach oben
+done
+
+