Estou usando o yocto para construir minha distribuição Linux personalizada. Preciso adicionar hiredis
à minha distribuição. Hiredis é uma biblioteca cliente C minimalista para o banco de dados Redis e preciso dela para acessar o Redis por meio de um aplicativo C.
A receitahiredis_0.14.0.bb
No meu sistema de compilação yocto há a receita hiredis_0.14.0.bb
armazenada na pasta meta-openembedded/meta-oe/recipes-extended/hiredis
e na meta camada meta-openembedded
.
O conteúdo da receita é o seguinte:
DESCRIPTION = "Minimalistic C client library for Redis"
HOMEPAGE = "http://github.com/redis/hiredis"
LICENSE = "BSD-3-Clause"
SECTION = "libs"
DEPENDS = "redis"
LIC_FILES_CHKSUM = "file://COPYING;md5=d84d659a35c666d23233e54503aaea51"
SRCREV = "685030652cd98c5414ce554ff5b356dfe8437870"
SRC_URI = "git://github.com/redis/hiredis;protocol=git \
file://0001-Makefile-remove-hardcoding-of-CC.patch"
S = "${WORKDIR}/git"
inherit autotools-brokensep pkgconfig
EXTRA_OEMAKE = "PREFIX=${prefix} LIBRARY_PATH=${baselib}"
# By default INSTALL variable in Makefile is equal to 'cp -a', which preserves
# ownership and causes host-user-contamination QA issue.
# And PREFIX defaults to /usr/local.
do_install_prepend() {
export INSTALL='cp -r'
}
O Git Fetcher baixa a versão 0.14.0
do Hiretedis
Se eu executar o comando:
> bitbake hiredis
o hiredis
código é obtido pelo GitHub e compilado corretamente. A versão no código baixado do GitHub é a 0.14.0, enquanto está SRC_URI
definida como:
SRC_URI = "git://github.com/redis/hiredis;protocol=git \
file://0001-Makefile-remove-hardcoding-of-CC.patch"
Este valor SRC_URI
significa que está usando o Git Fetcher e não há parâmetros especificados branch
ou rev
e isso significa que os valores desses parâmetros são master
.
A única referência à versão 0.14.0
está no nome da receita (hiredis_ 0.14.0
.bb) então escolhe-se a versão 0.14.0
porque o valor da PV
variável é 0.14.0
(o PV
valor é definido pelo nome da receita).
Minha pergunta
Por que a versão buscada da biblioteca Hiretedis é 0.14.0
e não a mais recente?
Como @Kusalananda conta em seu comentário:
Por exemplo, para buscar e compilar a versão 1.0.1 de
hiredis
posso adicionar à pastamy-meta-layer/recipes-extended/hiredis
um arquivohiredis_%.bbappend
e, nele, definir o valorSRC_REV
igual ao hash de commit da versão 1.0.1 (ou seja8d1bfac4640fe90cd6f800d09b7f53e886569b98
).No caso da receita
hiredis_0.14.0.bb
mostrada pela pergunta preciso alterar também o valor da variávelSRC_URI
.O conteúdo do arquivo adicionado
hiredis_%.bbappend
é mostrado abaixo:Descrição do arquivo bbappend
SRC_URI
valor eu defini o valor dos parâmetrosprotocol=https;branch=master
do Git Fetcher (em vez disso, na receita original, seus valores foramprotocol=git
ebranch
não estão definidos)SRCREV
como igual ao hash de commit da versão 1.0.1inherit cmake
porque a versão 1.0.1 usa CMakeMinha solução não funciona para todas as versões de
hiredis
Acho que minha solução poderia ser uma solução geral do problema apresentado na pergunta para muitas receitas de yocto, mas no caso
hiredis
nem sempre funciona.Testei a solução para algumas versões com o seguinte resultado: