Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make install not working #8

Open
farosas opened this issue Jul 25, 2014 · 7 comments
Open

make install not working #8

farosas opened this issue Jul 25, 2014 · 7 comments
Assignees

Comments

@farosas
Copy link
Member

farosas commented Jul 25, 2014

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.

@gbc921
Copy link
Member

gbc921 commented Jul 26, 2014

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.

@gbc921
Copy link
Member

gbc921 commented Nov 10, 2015

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?

@gbc921
Copy link
Member

gbc921 commented Nov 10, 2015

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.

@farosas
Copy link
Member Author

farosas commented Nov 11, 2015

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

@gbc921
Copy link
Member

gbc921 commented Nov 11, 2015

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?

@gabrielprioli
Copy link

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!

@farosas
Copy link
Member Author

farosas commented Nov 13, 2015

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants