Empfohlene Vorgehensweise zur Verwendung von Autoconf Archivmakros und andere Makros von Drittanbietern

8

Ich habe einige nützliche Makros im Autoconf-Archiv gefunden, und auch eine nützliche m4-Datei, die hilft, die Boost-Bibliothek zu testen. Das Autoconf-Archiv wird von GNU gehostet und der Boost m4-Helfer wird als GitHub-Repo gehostet. Ich möchte sie in einem C ++ - Projekt verwenden, das Autotools verwendet und von git verwaltet wird.

Natürlich ist es möglich, sie von Hand herunterzuladen und in das Git Repo meines Projekts einzufügen. Aber gibt es einen empfohlenen Weg, dies zu tun?

Zum Beispiel ist es möglich, sicherzustellen, dass die Dateien von Drittanbietern in der neuesten Version sind, indem der Build-Prozess sie automatisch herunterlädt, anstatt sie im Repo manuell zu aktualisieren. Es hilft auch, die Quelle von externen Dateien zu trennen, da die 3rd-Party-Dateien nicht wirklich Teil des reinen Quellcodes sind, sondern extern heruntergeladene Dateien sind.

Wenn es eine gute Sache ist, sollte es mit autogen.sh von Hand gemacht werden? Oder mit automake.am? Oder beides (z. B. Dateien in autogen.sh herunterladen und Testversion + update in automake)?

Ich denke, sie im git-Repo zu behalten ist kein Desaster (wie Dinge wie COPYING, git.mk und andere), aber es ist immer noch nützlich, wenn der Build-Prozess sie vom Web auf die neueste Version aktualisiert / p>     

cfa45ca55111016ee9269f0a52e771 04.08.2013, 19:56
quelle

2 Antworten

4

Im Gegensatz dazu sind autoconf-Makro-Dateien Teil der entsprechenden Quelle , die wichtig genug ist in make dist tarball benötigt werden. In Wirklichkeit ändern sich die meisten autoconf-Makros nicht oft genug, um irgendeine Art von Update-Funktion im Build zu rechtfertigen. Selbst wenn sie oft aktualisiert wurden, gibt es keine Garantie, dass das aktualisierte Makro den vorhandenen Build nicht zerstört.

Es ist eine gute Idee, Makros unter Kontrolle zu halten.

BEARBEITEN: Ich stimme @delinquentme zu, dass das Hinzufügen dieser Dateien als ein git Submodul nett wäre (kann auf eine Version zugreifen, leicht aktualisiert werden). Aber ich sehe ein paar Probleme mit diesem Ansatz.

Der erste ist, dass git nicht (IIUC) partielle Checkouts auch mit Submodulen unterstützt. Das GNU Autoconf Archive (zum Beispiel) hat viele Makros und du wirst wahrscheinlich nur ein paar von ihnen brauchen. Der Rest der unbenutzten Dateien und Makros ist immer noch da, unbenutzt und im Weg.

Das zweite Problem ist AC_CONFIG_MACRO_DIR findet nur Makros in eins Verzeichnis mit keine Unterverzeichnissuche in diesem Verzeichnis, was die Verwendung mehrerer Submodule nervig macht. Sie könnten es tun, indem Sie die Submodule irgendwo unauffällig auschecken und sie mit AC_CONFIG_MACRO_DIR verknüpfen.

Für mich ist die Upstream-Geschichte des Makros nicht wirklich wichtig. Dafür ist das VCS des Upstreams zuständig: -).

    
ldav1s 05.08.2013 04:43
quelle
1

Sie haben eine Reihe von Optionen für eine differenziertere Handhabung dieser Abhängigkeiten:

Submodules ( Ссылка )

  

... [S] ubmodule sind für verschiedene Projekte gedacht, die Sie gerne machen würden   Teil Ihres Quellbaums, während die Geschichte der beiden Projekte noch läuft   bleibt völlig unabhängig und Sie können nicht den Inhalt des ändern   Submodul aus dem Hauptprojekt. [Hinweis: cd-in Repo wird Bearbeitungen erlauben]

  • Ähnelt Ihrem vorgeschlagenen In-Repo-Ansatz

  • Besonders leistungsfähig für jeden in Git gespeicherten Code (wie Autoconf Archives)

  • Friert einen exakten Commit ein ( Ссылка ) und mildert so den Chance auf Build zu brechen

  • Weniger Vorkonfiguration als ein Hook

Haken ( Ссылка )

  

Wie viele andere Versionskontrollsysteme kann Git benutzerdefinierte Skripts auslösen, wenn bestimmte wichtige Aktionen ausgeführt werden. Es gibt zwei Gruppen dieser Hooks: Client-Seite und Server-Seite.

  • Wird über git-spezifische Ereignisse ausgeführt

  • Git-unterstützt, wenn Sie nach fortlaufender Integration suchen statt nach eingefrorenen Elementen

Ich stimme mit @ ldav1s überein, sie innerhalb der Versionskontrolle zu halten, aber im Hinblick auf die Wartbarkeit könnte es hilfreich sein zu wissen, woher der Code stammt (Historie pflegen). Und mit zukünftigen Updates scheint es vorteilhaft, die Arbeit, die andere getan haben, aufzubauen ...

TLDR: Gehen Sie mit einem Submodul, pflegen Sie die Historie und machen Sie es fertig.

%Vor%

Der obige Befehl submoduliert die URL in Ihre Codebasis innerhalb des aktuellen Verzeichnisses

    
carl crott 03.02.2014 23:43
quelle

Tags und Links