Wie ich bereits angedeutet habe, bin ich im Moment dabei Änderungen an rsync vorzunehmen und ein paar Patches in die aktuelle Version zu integrieren. Wie fast alle Unix-Tools wird rsync mit dem üblichen configure && make && sudo make install
kompiliert. Dies ist jedoch unpraktisch, wenn man die Anwendung aus XCode heraus starten und v.a. debuggen will.
Folgende Schritte sind nötig, um rsync in XCode zu kompilieren:
- Download und entpacken des rsync-Sourcecodes
- Anlegen eines neuen XCode Projekts (C, Kommandozeilentool)
./configure
aufrufen, umconfig.h
zu erzeugen- Alle nötigen Source-Dateien in das XCode Projekt einfügen. Achtung: Nicht alle C-Sourcefiles werden zum kompilieren benötigt. Es sind nur die im unter
$OBS1
,$OBS2
,$OBS3
und$DAEMON_OBS
aufgeführten Dateien nötig. Zusätzlich dazu habe ich als Source die benötigten Dateien aus den Unterverzeichnissen libs, popt und zlib eingefügt. - Da ich zusätzlich den iconv-Patch einspielen möchte, muß rsync gegen die libiconv gelinkt werden. Dafür öffnet man im Baum unter Targets den Punkt „Link Binary With Libraries“ und fügt eine existierende Datei hinzu. Das ist unnötig kompliziert: Finder Öffnen, im Menü „Gehe zum Ordner…“ auswählen und in den Dialog
/usr/lib
eingeben. Man zieht dann den lib-Ordner in den Dateidialog von XCode, um dort das normalerweise versteckte/usr/lib
-Verzeichnis anzuzeigen. Schließlich wählt man dielibiconv.dylib
aus. - In den Infos des entsprechenden Compiler-Targets muß unter „Preprocessing“ noch als „Preprocessor Macros“ den Wert
HAVE_CONFIG_H
eintragen.
Danach muß man nur noch den Source patchen (hier mit dem iconv Patch und dem extended attributes patch) und kompilieren. Wenn man sicher sein möchte, daß man alle Abhängigkeiten ordentlich erschlagen hat, kann man in den Einstellungen des Compilers noch ZeroLink deaktivieren. Dadurch werden alle vom Linker nicht gefundenen Symbole schon beim Compilieren angezeigt, nicht erst wenn die Anwendung ausgeführt wird.
Unverständlich ist für mich, warum es so kompiliziert ist, Bibliotheken zu verlinken. An dieser Stelle hätte ich erwartet, schon ein Auswahlmenü mit den Standard-Verzeichnissen präsentiert zu bekommen, um möglichst schnell die benötigte Bibliothek einfügen zu finden. Das ist eine der wenigen Stellen von XCode, die etwas aufpoliert werden sollte…
Leider läßt sich rsync nicht lokal debuggen – es gibt dabei Probleme mit den Filedeskriptoren (beim Lesen kommt EOF zurück). Ein Workaround ist, rsync über ssh als Transport zu verwenden. Mit einem Schlüssel ohne Paßwort und einem dazu passenden Eintrag in den authorized_keys2
klappt das auch im Debugger.
Vielen Dank an Simon Brückner für den Tipp, wie man die Library verlinkt (kommt ursprünglich von dieser Seite).