GNU Autotools: Come si fa a includere i file di origine nella tarball 'make dist' che sono al di sopra della directory di origine root?

StackOverflow https://stackoverflow.com/questions/1836209

Domanda

Ho un progetto Subversion che utilizza Gnu Autotools (vale a dire, automake, autoconf, e libtool) per gestire il codice sorgente all'interno di una sottocartella (denominata 'subpackage'). I file di riferimenti sottopacchetto di origine che sono al di sopra directory sorgente principale del subpackage, e sono comuni ad altri sottopacchetti. Purtroppo, durante l'esecuzione di 'make dist' per creare il tarball di distribuzione, i file di origine comune non vengono inclusi nella distribuzione.

C'è un modo per utilizzare autoconf / automake per spostare questi file di origine comuni in una sottodirectory della sottopackage prima di distribuire la fonte, e di avere il makefile in sé regolare per puntare correttamente per i file di origine trasferiti? Chiaramente, sarebbe possibile avere il makefile spostare questi file di origine sopra prima della compilazione, ma per lavorare all'interno del repository Subversion, questo causa problemi perché questi file spostati sono a controllo di revisione, e la sua facile da modificare accidentalmente il file spostato al posto di quella originale .

È stato utile?

Soluzione

Invece di spostare i file in giro (che suona sempre pesce a me), Perché non usare i link simbolici? Si potrebbe avere il vostro riferimento subpackage solo i file locali, e una regola Makefile che dice "se i file locali non è qui, creare un link simbolico al fascicolo del genitore". Durante make dist, il link simbolico sarà convertita in un normale file automaticamente.

Altri suggerimenti

Si potrebbe avere una directory vuota in subpackage, chiamato, per esempio, "comune", con un makefile che copia i file esterni. Poi si potrebbe utilizzare il target dist-gancio per spostare i file direttamente nella versione del " directory comune" che andranno zippato nella tarball. In questo modo non c'è bisogno di preoccuparsi di loro in giro e in fase di modifica. Si potrebbe anche sovrascrivere il Makefile.am, Makefile.in e Makefile in "comune", come è stato copiato.

Esempio in subpackage / common / Makefile.am (non testata):

dist-hook:
    cp -p $(top_srcdir)/../common/Makefile* $(top_srcdir)/../common/*.[ch] $(distdir)

Non sono sicuro al 100% che funzionerà comunque. Si potrebbe rompere il resto del pacchetto, a seconda di dove tutto il resto si aspetta di trovare quei file di origine; probabilmente si romperà rendendo dist estraendo l'tarball e provare a fare dist da lì. Si deve sapere che questo tipo di inganno è visto di buon occhio. Ma spero di averti dato abbastanza idee per giocare con.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top