Estou tentando resolver um problema do makefile em que as bibliotecas são instaladas no lugar errado. Alguém escreveu o makefile e não é fácil corrigi-lo. Estou tentando mover as bibliotecas depois que elas foram instaladas. A instalação inclui permissões, links simbólicos nos BSDs, Linux e Solaris.
Dado um prefix
de /usr/local
e libdir
de /usr/local/lib/64/
, o makefile está colocando artefatos com libdir
em prefix
em vez de tratar libdir
como um caminho absoluto. Aqui está parte da cópia que acontece:
cp libcrypto.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/libssl.pc
cp openssl.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/openssl.pc
Eu achei que seria relativamente fácil pegar o /usr/local//usr/local/*
e mover toda a árvore de artefatos para /usr/local
, mas está se tornando mais complicado do que eu pensava.
Eu tentei várias sugestões para mover o diretório, incluindo Como mover todos os arquivos e pastas via comando mv e Mova arquivos e pastas recursivamente no Linux . Cada um deles sofreu pequenos problemas, como se mudar para /usr/local/lib/64/64/pkgconfig/openssl.pc
e não preservar links simbólicos.
Olhando para a página man mv(1)
do Linux, eu nem tenho certeza se há alguma garantia de preservação permissão e links simbólicos presentes em um diretório. O comando mv
do Posix fala um pouco sobre permissões, mas é no contexto de escrever para o diretório de destino.
Eu também tentei remover componentes de caminho com ${filename:$prefix}
, mas isso causou problemas com links simbólicos. ${filename:$prefix}
provavelmente não é Posix, mas eu tenho Bash.
A minha pergunta é, é possível fazê-lo de forma portável nos BSDs, Linux, OS X e Solaris? Se sim, então como devo estar fazendo isso?
Aqui está o código que eu criei, mas parece que está errado:
# Fix OpenSSL's broken directory structure
path="$PREFIX/$LIBDIR"
while [ $(echo "$path" | cut -c1-3) != "lib" ]
do
echo "PATH: $path"
path=${path#*/}
done
echo "PATH: $path"
Aqui está a saída:
PATH: /usr/local//usr/local/lib/64
PATH: usr/local//usr/local/lib/64
PATH: local//usr/local/lib/64
PATH: /usr/local/lib/64
PATH: usr/local/lib/64
PATH: local/lib/64
PATH: lib/64
Seguido por:
cd "$PREFIX/$PREFIX"
mv "$path" "$PREFIX"
rm -rf "$PREFIX/$PREFIX"