Open farosas opened 10 years ago
Depois de muito brigar com o google, achei:
Precisamos avisar o shell qual vai ser o internal field separator:
install: all
IFS=:
mkdir -p $(LOCAL)/{tex,source,doc}/latex/$(NAME)
unset IFS
Provavelmente vai funcionar. Testo depois.
Ok, vamos lá novamente.
Para a (melhor) distro, Arch Linux o retorno da variável TEXMFLOCAL
é /usr/local/share/texmf:/usr/share/texmf
como citado anteriormente.
No entanto (as of 2015-11-10) as duas pastas não existem, mas a /usr/share/texmf
é substituída por usr/share/texmf-dist
.
Provavelmente instalar os arquivos nessa pasta além de não surtir efeito, cairíamos no famoso problema de suporte a diferentes distribuições, além de requerer acesso root/sudo ao usuário.
Nos meus testes (tanto em texstudio e comando pdflatex) a instalação somente pela home do usuário (TEXMFHOME
, inst
no makefile) funciona like a charm.
Acredito que se mantermos somente esse tipo de instalação, eliminamos o problema acima, não enfiamos o dedo nos arquivos do sistema e provavelmente a chance de possuírmos sucesso com esse diretório/solução em outras distros é maior.
O que acham?
Also, a questão do IFS ainda não está funcionando. Tentei usar as variações de declaração do IFS:
Sem sucesso nenhum. Ele não reconhece a porcaria como Field Separator. Pelo que vi o problema é que ele não consegue setar o IFS, pois se mandarmos imprimir ela aparece vazia.
Fiz um teste aqui e deu certo:
homes = $$VAR #export VAR=/root:/home
run:
@echo $(homes)
@IFS=':' ; \
for path in $(homes); do \
echo $$path ; \
done
Hum, deu parcialmente certo aqui:
LOCAL = /home/<username>/tmp/usr/local/share/texmf:/home/<username>/tmp/usr/share/texmf
install: all
@IFS=':'; \
for path in $(LOCAL); do \
echo $$path/tex/latex/$(NAME); \
mkdir -p $$path/{tex,source,doc}/latex/$(NAME); \
#cp $(NAME).dtx $$path/source/latex/$(NAME); \
#cp $(NAME).cls $$path/tex/latex/$(NAME); \
#cp $(NAME).pdf $$path/doc/latex/$(NAME); \
done
unset IFS
A questão é que para o primeiro passo do for, ele não expande o $(NAME)
e não cria a pasta final utpfr-pg, mas no segundo isso acontece. Tanto que se descomentar o cp
ele quer tentar copiar a pasta, ao invés do arquivo (ommiting directory err).
Não cheguei a testar se a opção -p
do mkdir
teria influência nisso, mas a expansão {}
não tem.
E a questão sobre a logística que comentei ali em cima, alguma opinião?
Algo que pode ajudar a entender o problema é o fato de que o mkdir
só considera a expansão feita por {}
no último valor da variável $LOCAL
. Testamos sem a última variável $NAME
para simplicidade.
$ LOCAL=./a:./b:./c
$ IFS=:
$ mkdir $LOCAL/{d,e}
mkdir: cannot create directory `./c/d': No such file or directory
mkdir: cannot create directory `./a': File exists
mkdir: cannot create directory `./b': File exists
mkdir: cannot create directory `./c/e': No such file or directory
$ ls
a b
Pela execução acima (com erro forçado) vemos que o mkdir
tentou criar "/c/d" e "/c/e" corretamente (expandindo o {}
), mas não expandiu para os dois primeiros valores da variavel $LOCAL
.
Portanto, as execuções de mkdir
foram as seguintes:
mkdir ./a # criou o diretório com sucesso
mkdir ./a # erro que vemos no output do mkdir
mkdir ./b # criou o diretório com sucesso
mkdir ./b # erro que vemos no output do mkdir
mkdir ./c/d # erro que vemos no output do mkdir (forçado sem opção -p)
mkdir ./c/e # erro que vemos no output do mkdir (forçado sem opção -p)
PS: estava discutindo isso com o Gabriel e registrei para documentar o que testamos!
root@localhost:~ $ cat Makefile
homes = $$VAR #export VAR=/root:/home
name = pkg
run:
@set -x; IFS=: ; \
for path in $(homes); do \
mkdir -p $$path/{tex,src,doc}/latex/$(name) ; \
done
root@localhost:~ $ make
+ IFS=:
+ for path in '$VAR'
+ mkdir -p /root/tex/latex/pkg /root/src/latex/pkg /root/doc/latex/pkg
+ for path in '$VAR'
+ mkdir -p /home/tex/latex/pkg /home/src/latex/pkg /home/doc/latex/pkg
root@localhost:~ $ for dir in /{root,home}/{tex,src,doc}/latex/pkg; do [ -d $dir ] && echo "$dir exists"; done
/root/tex/latex/pkg exists
/root/src/latex/pkg exists
/root/doc/latex/pkg exists
/home/tex/latex/pkg exists
/home/src/latex/pkg exists
/home/doc/latex/pkg exists
root@localhost:~ $
Não entendi o lance de não expandir a variável. É GNU make que vocês estão usando?
GNU Make 3.82
Built for armv5tel-redhat-linux-gnu
Sobre a questão de colocar tudo no ~/texmf, eu concordo. Fica mais simples de manter.
No meu sistema, TEXMFLOCAL retorna
/usr/local/share/texmf:/usr/share/texmf
então quando acontece:mkdir -p $(LOCAL)/{tex,source,doc}/latex/$(NAME)
o make cria uma pasta "texmf:/" e ai já viu né..Não sei se TEXMFLOCAL deveria retornar mais de um valor, mas como qualquer variável de ambiente dessas do tipo path pode ter mais de um valor, acho que deveríamos dar uma checada se tem como filtrar isso direito.