Nach einer Erweiterung der XML-Konfigurations-Dateien in einem Open-Source Projekt, sind die Validierungs-Tests in der CI fehlgeschlagen. In diesem Projekt werden die XML-Dateien gegen eine rng-Datei (RELAX NG-Schema) validiert und ich habe das Schema noch nicht um meine Erweiterungen ergänzt.
Ich stellte fest, dass für die Validierung das Tool xmllint (Bestandteil von libxml2) verwendet wird. Um meine Änderungen schnell selber prüfen zu können, wollte ich das Tool auf meiner Maschine ausführen und die XML-Dateien gegen die RNG-Dateien validieren.
Ausgangssituation
Kleiner Auszug aus der cppcheck-cfg.rng (mit meinen Änderungen):
test.xml
Ausführen unter Windows
Normalerweise kennt man es unter Windows so, dass man einen Installer oder ein ggf. auch noch ein zip-Verzeichnis herunterlädt und dann eine .exe-Datei ausführen kann.
Bei dem Tool xmllint geht es leider nicht so einfach, obwohl die Entwickler unter ftp://xmlsoft.org/libxml2/win32/ anscheinend für Windows kompilierte Dateien zur Verfügung stellen reicht es hier leider nicht aus, nur das libxml2-2.7.8.win32.zip herunterzuladen und auszupacken.
Beim Ausführen erhält man die schöne nachfolgende Meldung:
Jetzt muss man aus dem Ftp-Verzeichnis auch noch die Abhängigkeits-Archive herunterladen, extrahieren und die benötigten Dlls in das libxml2-2.7.8.win32\bin-Verzeichnis kopieren und dann nochmals probieren. In diesem Fall ist es nur noch das iconv-1.9.2.win32.zip und der Aufwand geht noch. Bei noch mehr Abhängigkeiten wird es aber ein wenig nervig/lästig.
PS: Mit ist bewusst, dass diese Tools nicht für Endanwender gedacht sind und von daher dieser Aufwand (die Abhängigkeiten zusammenstellen) durchaus nicht zu viel ist. Es geht mir aber darum einen anderen möglichen Weg zu zeigen.
Ab Windows 10 haben wir die Linux-Bash in Windows integriert bekommen. Da habe ich mich gefragt warum dann nicht über Linux die Validierung durchführen. Unter Linux werden die Abhängigkeiten von Paketen die über die Paketverwaltung verteilt werden, automatisch heruntergeladen und das Programm ist direkt verfügbar.
Linux Programm unter Windows benutzen
Als erstes startet man die “Bash on Ubuntu on Windows”, die man durch die Windows-Taste und die Eingabe von “Bash” in die Suchleiste aufgelistet bekommt. Oder alternativ öffnet man einfach die Eingabeaufforderung (STRG+R, cmd + ENTER) und gibt hier “bash” ein.
Sollte die Windows-Suche keine Ergebnisse bringen oder in der Eingabeaufforderung die nachfolgende Meldung ausgegen werden, dann ist das Linux-Subsystem noch nicht aktiviert (Linux Bash unter Windows 10 aktivieren).
Jetzt aber weiter mit der Bash.
xmllint (bestandteil von libxml2-utils) installieren
Nach dem Abschluss des Befehls durch Drücken der Taste ENTER wartet man ein kurzen augenblich und schon ist das Paket installiert.
Jetzt können wir ganz einfach mit der Bash in das gewünschte Verzeichnis navigieren:
Und dann ausführen:
Und schon funktioniert das Programm. :-)
Fazit
Beides ist aufjeden Fall möglich und das ist auch gut so. Ich bin aber auf jeden Fall ein Freund der Bash unter Windows. So können sich die Entwickler weiterhin um die Programme auf den jeweiligen Plattformen kümmern, statt alles permanent zu portieren und für alle möglichen Plattformen anzupassen und ich muss auch unter Windows auf garnicht verzichten.