2013-02-02 9 views
12

Sto provando a convertire il nostro sistema di generazione sul posto di lavoro in cmake e ho incontrato un problema interessante con gli RPM che genera (tramite cpack): aggiunge automaticamente tutte le dipendenze che pensa che il tuo RPM abbia nel suo elenco di librerie richiesteCome si fa a fare in modo che cpack non aggiunga le librerie richieste a un RPM?

In generale, è grandioso, ma nel mio caso è catastrofico. Sfortunatamente, i pacchetti di sviluppo che costruiamo finiscono per essere installati con uno strumento sviluppato internamente che utilizza rpm per installarli in un database RPM separato da quello di sistema. È stupido, ma non posso cambiarlo. Ciò significa che tutte le librerie di sistema su cui si baserà qualsiasi libreria normale (come libc o libpthread) non si trovano nel database RPM utilizzato con i nostri pacchetti di sviluppo. Quindi, se un RPM per uno dei nostri pacchetti di sviluppo elenca le librerie di sistema come richieste, non possiamo installarlo, poiché rpm penserà che non sono installate (dato che sono elencate nel normale database piuttosto che in quello che viene detto di usare durante l'installazione dei nostri pacchetti). La nostra attuale build lo gestisce bene, perché non elenca le librerie di sistema come dipendenze negli RPM, ma cpack popola automaticamente l'elenco delle librerie richieste del RPM e inserisce le librerie di sistema. Ho bisogno di un modo per impedirgli di farlo.

Ho provato a impostare CPACK_RPM_PACKAGE_REQUIRES su "", ma ciò non ha alcun effetto. Il pacchetto RPM genera ancora finisce con le librerie di sistema elencate come richieste. Tutto quello che posso pensare di fare a questo punto è copiare il generatore di cpack RPM e hackerarlo per fare quello che voglio e usarlo al posto di quello standard, ma preferirei evitarlo. Qualcuno ha idea di come posso ottenere che cpack smetta di compilare l'RPM con le librerie richieste?

risposta

9

vedere in fondo alla

http://www.rpm.org/max-rpm/s1-rpm-depend-auto-depend.html

L'autoreqprov Tag - Disattivare automatica delle dipendenze lavorazione

Ci possono essere momenti in cui l'elaborazione automatica delle dipendenze di RPM non è desiderata. In questi casi, il tag autoreqprov può essere usato per disabilitarlo. Questo tag prende un valore sì/no o 0/1. Ad esempio, per disabilitare l'elaborazione automatica delle dipendenze, può essere utilizzata la seguente riga:

AutoReqProv: no

EDIT:

Per impostare questa in CMake, è necessario fare set(CPACK_RPM_PACKAGE_AUTOREQPROV " no"). Lo spazio aggiuntivo sembra essere necessario davanti a (o dietro) il no in modo che funzioni. Sembra che il modulo RPM per cpack abbia un bug che lo rende così che non ti permette di impostare alcune delle sue variabili su qualcosa di più breve di 3 caratteri.

+1

Sembra proprio quello che ho bisogno di impostare, ma la domanda è: come faccio a farlo usando cmake e cpack? –

+1

Ok. La tua risposta non mi ha dato tutte le informazioni di cui avevo bisogno, ma è stato sufficiente per capire come risolverlo, quindi ho aggiornato la risposta per includere le istruzioni su come impostare 'AutoReqProv' usando cmake. –

3

Per aggiungere al Mark Lakata's answer sopra, c'è una fotografia del "Maximum RPM" doc

http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html

che aggiunge anche:

Il autoreq e autoprov tag possono essere utilizzato per disabilitare l'elaborazione automatica dei requisiti o "fornisce" solo, rispettivamente.

E almeno con la mia versione di CPackRPM, sembrano esserci variabili simili che è possibile impostare ad es.

set(CPACK_RPM_PACKAGE_AUTOREQ " no")

per disattivare solo la lavorazione automatica di dipendenza 'Richiede'.

Problemi correlati