Criando um wrapper .sh no meu pacote debian

3

Eu estou tentando construir um pacote debian para um programa que usa mono. Meu make install target atualmente coloca todos os meus binários /usr/local/lib/mypackage , então cria um minúsculo script executável em /usr/local/bin que invoca os binários reais com mono. Eu uso um one-liner para substituir o espaço reservado PREFIX pelo caminho de instalação real:

install: DESTDIR=/usr/local
install: LIBDIR=$(DESTDIR)/lib
install: BINDIR=$(DESTDIR)/bin
install: $(PHONIX) $(ANTLR) doc
    install -m 0755 -d $(LIBDIR)/phonix
    install -m 0755 -t $(LIBDIR)/phonix $(PHONIX) $(ANTLER)
    install -m 0755 -D phonix.sh $(BINDIR)/phonix
    sed -i "s!PREFIX!$(LIBDIR)!" $(BINDIR)/phonix

Quando estou executando em dh_make , $(LIBDIR) e $(BINDIR) apontam para o diretório de empacotamento conforme desejado. Tudo é instalado no lugar certo para o empacotador, mas a chamada sed coloca o caminho do diretório de empacotamento local no script, que é colocado literalmente no pacote. Obviamente, isso não funciona quando eu realmente instalar o pacote no sistema de destino.

Acho que preciso mover a chamada sed para o script de pós-instalação, mas não sei como obter o diretório de instalação local (o equivalente moral de my $(LIBDIR) e $(BINDIR) ) em a etapa de pós-instalação. Ou existe uma maneira melhor de fazer isso?

Editar : aqui está o meu arquivo phonix.sh real, antes de o sed ser chamado:
#!/usr/bin/sh

exec mono PREFIX/phonix.exe

Como você pode ver, a finalidade somente deste arquivo é fornecer um wrapper executável para o .exe baseado em mono. A chamada sed apenas substitui PREFIX pelo valor de $(LIBDIR) . Então, tudo que eu realmente preciso saber é como posso obter a localização atual do meu .exe no sistema de destino para que o script wrapper funcione?

    
por JSBձոգչ 21.04.2011 / 15:31

1 resposta

2

Você está usando DESTDIR de maneira não padrão. Não é o prefixo de instalação do seu pacote, é o prefixo "fakeroot" para coisas como compilações de pacotes.

A maneira mais típica de escrever isso é algo assim:

prefix = /usr/local
bindir = $(prefix)/bin
libdir = $(prefix)/lib

install: $(PHONIX) $(ANTLR) doc
    install -m 0755 -d $(DESTDIR)$(libdir)/phonix
    install -m 0755 -t $(DESTDIR)$(libdir)/phonix $(PHONIX) $(ANTLER)
    install -m 0755 -D phonix.sh $(DESTDIR)$(bindir)/phonix
    sed -i "s!PREFIX!$(libdir)!" $(DESTDIR)$(bindir)/phonix

Deixe DESTDIR empty no makefile do seu pacote. Deve ser definido em debian/rules ou automaticamente por dh ou cdbs. Eu acho que a partir de sua pergunta que ele fica definido de alguma forma.

    
por 05.07.2011 / 15:51