Detection of libatomic is broken since version 2.47.0 and
b7f0d87daf
because C language is not enabled anymore:
-- Looking for __atomic_fetch_add_4 in atomic
-- Looking for __atomic_fetch_add_4 in atomic - not found
CMake Error at cmake_modules/CheckAtomic.cmake:59 (message):
Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
CMakeLists.txt:54 (include)
Indeed if C language is not enabled, the test will be run with the C++
compiler resulting in the following error:
Building CXX object CMakeFiles/cmTC_03d01.dir/CheckFunctionExists.cxx.o
/home/fabrice/buildroot/output/host/bin/x86_64-linux-g++ --sysroot=/home/fabrice/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O1 -g0 -D_FORTIFY_SOURCE=2 -DCHECK_FUNCTION_EXISTS=__atomic_fetch_add_4 -DNDEBUG -o CMakeFiles/cmTC_03d01.dir/CheckFunctionExists.cxx.o -c /home/fabrice/buildroot/output/build/i2pd-2.49.0/build/CMakeFiles/CMakeScratch/TryCompile-NApnv9/CheckFunctionExists.cxx
<command-line>: error: new declaration ‘char __atomic_fetch_add_4()’ ambiguates built-in declaration ‘unsigned int __atomic_fetch_add_4(volatile void*, unsigned int, int)’ [-fpermissive]
whereas with a C compiler, we'll get:
Building C object CMakeFiles/cmTC_7e47b.dir/CheckFunctionExists.c.o
/home/fabrice/buildroot/output/host/bin/x86_64-linux-gcc --sysroot=/home/fabrice/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O1 -g0 -D_FORTIFY_SOURCE=2 -DCHECK_FUNCTION_EXISTS=__atomic_fetch_add_4 -DNDEBUG -o CMakeFiles/cmTC_7e47b.dir/CheckFunctionExists.c.o -c /home/fabrice/buildroot/output/build/i2pd-2.49.0/build/CMakeFiles/CMakeScratch/TryCompile-e0zFMG/CheckFunctionExists.c
<command-line>: warning: conflicting types for built-in function ‘__atomic_fetch_add_4’; expected ‘unsigned int(volatile void *, unsigned int, int)’ [-Wbuiltin-declaration-mismatch]
Fix#1908
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
* [cpu] remove avx detect and code blocks, try to switch to __builtin
* [cpu] use __builtin_* only on x86 systems
* [cpu] perform check in separate function
* [cpu] set AES definition on MSVC
* update x86 and aes support checks at compile time
* [cmake] update comment about AES on MSVC
To use systemd daemon control, place files from this directory to debian folder before building package.
This forder contain files required for building debian packages.
The trunk repository is contains the packaging files for the latest stable version of Debian (if we not forgot to update them).
Files in subdirectories contains fixes to make possible to build package on specific versions of Debian/Ubuntu. They are used when building the release package.
@ -145,14 +152,17 @@ namespace czech // language namespace
{"Destination not found","Destinace nenalezena"},
{"StreamID can't be null","StreamID nemůže být null"},
{"Return to destination page","Zpět na stránku destinací"},
{"Back to commands list","Zpět na list příkazů"},
{"You will be redirected in %d seconds","Budete přesměrováni za %d sekund"},
{"LeaseSet expiration time updated","Aktualizován čas vypršení platnosti setu pronájmu"},
{"LeaseSet is not found or already expired","Set pronájmu není k nalezení nebo již vypršela jeho platnost"},
{"Transit tunnels count must not exceed %d","Počet tranzitních tunelů nesmí překročit %d"},
{"Back to commands list","Zpět na seznam příkazů"},
{"Register at reg.i2p","Zaregistrovat na reg.i2p"},
{"Description","Popis"},
{"A bit information about service on domain","Trochu informací o službě na doméně"},
{"Submit","Odeslat"},
{"Domain can't end with .b32.i2p","Doména nesmí končit na .b32.i2p"},
{"Domain must end with .i2p","Doména musí končit s .i2p"},
{"Such destination is not found","Takováto destinace nebyla nalezena"},
{"Unknown command","Neznámý příkaz"},
{"Command accepted","Příkaz přijat"},
{"Proxy error","Chyba proxy serveru"},
@ -162,6 +172,15 @@ namespace czech // language namespace
{"You may try to find this host on jump services below","Můžete se pokusit najít tohoto hostitele na startovacích službách níže"},
{"Invalid request","Neplatný požadavek"},
{"Proxy unable to parse your request","Proxy server nemohl zpracovat váš požadavek"},
{"Addresshelper is not supported","Addresshelper není podporován"},
{"Host %s is <font color=red>already in router's addressbook</font>. <b>Be careful: source of this URL may be harmful!</b> Click here to update record: <a href=\"%s%s%s&update=true\">Continue</a>.","Hostitel %s je <font color=red>již v adresáři routeru</font>. <b>Buďte opatrní: zdroj této URL může být škodlivý!</b> Klikněte zde pro aktualizaci záznamu: <a href=\"%s%s%s&update=true\">Pokračovat</a>."},
{"Host %s added to router's addressbook from helper. Click here to proceed: <a href=\"%s\">Continue</a>.","Hostitel %s přidán do adresáře routeru od pomocníka. Klikněte zde pro pokračování: <a href=\"%s\">Pokračovat</a>."},
{"Host %s is <font color=red>already in router's addressbook</font>. Click here to update record: <a href=\"%s%s%s&update=true\">Continue</a>.","Hostitel %s je <font color=red>již v adresáři routeru</font>. Klikněte zde pro aktualizaci záznamu: <a href=\"%s%s%s&update=true\">Pokračovat</a>."},
{"<b>Note:</b> result string can be used only for registering 2LD domains (example.i2p). For registering subdomains please use i2pd-tools.","<b>Uwaga:</b> wynik string może być używany tylko do rejestracji domen 2LD (przykład.i2p). Do rejestracji subdomen należy użyć narzędzi i2pd."},
{"Address","Adres"},
{"Type","Typ"},
{"EncType","TypEnkrypcji"},
{"Expire LeaseSet","Wygaśnij LeaseSet"},
{"Inbound tunnels","Tunele przychodzące"},
{"%dms","%dms"},
{"Outbound tunnels","Tunele wychodzące"},
{"Tags","Tagi"},
{"Incoming","Przychodzące"},
{"Outgoing","Wychodzące"},
{"Destination","Miejsce docelowe"},
{"Amount","Ilość"},
{"Incoming Tags","Przychodzące tagi"},
{"Tags sessions","Sesje tagów"},
{"Status","Status"},
{"Local Destination","Lokalne miejsce docelowe"},
{"Streams","Strumienie"},
{"Close stream","Zamknij strumień"},
{"Such destination is not found","Nie znaleziono takiego miejsca docelowego"},
{"I2CP session not found","Sesja I2CP nie została znaleziona"},
{"I2CP is not enabled","I2CP nie jest włączone"},
{"Invalid","Niepoprawny"},
{"Store type","Rodzaj przechowywania"},
{"Expires","Wygasa za"},
{"Non Expired Leases","Leasingi niewygasłe"},
{"Gateway","Brama"},
{"TunnelID","IDTunelu"},
{"EndDate","DataZakończenia"},
{"floodfill mode is disabled","tryb floodfill jest wyłączony"},
{"Queue size","Wielkość kolejki"},
{"Run peer test","Wykonaj test peer"},
{"Reload tunnels configuration","Załaduj ponownie konfigurację tuneli"},
{"<b>Note:</b> any action done here are not persistent and not changes your config files.","<b>Uwaga:</b> każda akcja wykonana tutaj nie jest trwała i nie zmienia Twoich plików konfiguracyjnych."},
{"no transit tunnels currently built","brak obecnie zbudowanych tuneli tranzytowych"},
{"SAM disabled","SAM wyłączony"},
{"no sessions currently running","brak aktualnie uruchomionych sesji"},
{"SAM session not found","Sesja SAM nie została znaleziona"},
{"SAM Session","Sesja SAM"},
{"Server Tunnels","Tunele Serwera"},
{"Client Forwards","Przekierowania Klienta"},
{"Server Forwards","Przekierowania Serwera"},
{"Unknown page","Nieznana strona"},
{"Invalid token","Nieprawidłowy token"},
{"SUCCESS","SUKCES"},
{"Stream closed","Strumień zamknięty"},
{"Stream not found or already was closed","Strumień nie został znaleziony lub został już zamknięty"},
{"Destination not found","Nie znaleziono punktu docelowego"},
{"StreamID can't be null","StreamID nie może być null"},
{"Return to destination page","Wróć do strony miejsca docelowego"},
{"You will be redirected in %d seconds","Zostaniesz prekierowany za %d sekund"},
{"LeaseSet expiration time updated","Zaktualizowano czas wygaśnięcia LeaseSet"},
{"LeaseSet is not found or already expired","LeaseSet nie został znaleziony lub już wygasł"},
{"Transit tunnels count must not exceed %d","Liczba tuneli tranzytowych nie może przekraczać %d"},
{"Back to commands list","Powrót do listy poleceń"},
{"Register at reg.i2p","Zarejestruj się na reg.i2p"},
{"Description","Opis"},
{"A bit information about service on domain","Trochę informacji o usłudze w domenie"},
{"Submit","Zatwierdź"},
{"Domain can't end with .b32.i2p","Domena nie może kończyć się na .b32.i2p"},
{"Domain must end with .i2p","Domena musi kończyć się na .i2p"},
{"Unknown command","Nieznana komenda"},
{"Command accepted","Polecenie zaakceptowane"},
{"Proxy error","Błąd serwera proxy"},
{"Proxy info","Informacje o proxy"},
{"Proxy error: Host not found","Błąd proxy: Nie znaleziono hosta"},
{"Remote host not found in router's addressbook","Nie znaleziono zdalnego hosta w książce adresowej routera"},
{"You may try to find this host on jump services below","Możesz znaleźć tego hosta na poniższych usługach skoku"},
{"Invalid request","Nieprawidłowe żądanie"},
{"Proxy unable to parse your request","Serwer proxy nie może przetworzyć Twojego żądania"},
{"Addresshelper is not supported","Adresshelper nie jest obsługiwany"},
{"Host %s is <font color=red>already in router's addressbook</font>. <b>Be careful: source of this URL may be harmful!</b> Click here to update record: <a href=\"%s%s%s&update=true\">Continue</a>.","Host %s <font color=red>jest już w książce adresowej routera</font>. <b>Uważaj: źródło tego adresu URL może być szkodliwe!</b> Kliknij tutaj, aby zaktualizować rekord: <a href=\"%s%s%s&update=true\">Kontynuuj</a>."},
{"To add host <b>%s</b> in router's addressbook, click here: <a href=\"%s%s%s\">Continue</a>.","Aby dodać host <b>%s</b> w książce adresowej routera, kliknij tutaj: <a href=\"%s%s%s\">Kontynuuj</a>."},
{"Addresshelper request","Prośba Addresshelper"},
{"Host %s added to router's addressbook from helper. Click here to proceed: <a href=\"%s\">Continue</a>.","Host %s dodany do książki adresowej routera od pomocnika. Kliknij tutaj, aby kontynuować: <a href=\"%s\">Kontynuuj</a>."},
{"Host %s is <font color=red>already in router's addressbook</font>. Click here to update record: <a href=\"%s%s%s&update=true\">Continue</a>.","Host %s jest <font color=red>już w książce adresowej routera</font>. Kliknij tutaj, aby zaktualizować rekord: <a href=\"%s%s%s&update=true\">Kontynuuj</a>."},
{"Cannot resolve upstream proxy","Nie można rozwiązać serwera proxy upstream"},
{"Hostname is too long","Nazwa hosta jest zbyt długa"},
{"Cannot connect to upstream SOCKS proxy","Nie można połączyć się z proxy SOCKS upstream"},
{"Cannot negotiate with SOCKS proxy","Nie można negocjować z proxy SOCKS"},
{"CONNECT error","Błąd POŁĄCZENIE"},
{"Failed to connect","Nie udało się połączyć"},
{"SOCKS proxy error","Błąd proxy SOCKS"},
{"Failed to send request to upstream","Nie udało się wysłać żądania do upstream"},
{"No reply from SOCKS proxy","Brak odpowiedzi od serwera proxy SOCKS"},
{"Cannot connect","Nie można się połączyć"},
{"HTTP out proxy not implemented","Serwer wyjściowy proxy HTTP nie został zaimplementowany"},
{"Cannot connect to upstream HTTP proxy","Nie można połączyć się z proxy HTTP upstream"},
{"Host is down","Host jest niedostępny"},
{"Can't create connection to requested host, it may be down. Please try again later.","Nie można utworzyć połączenia z żądanym hostem, może być wyłączony. Spróbuj ponownie później."},
@ -58,7 +58,7 @@ namespace portuguese // language namespace
{"Unknown","Desconhecido"},
{"Proxy","Proxy"},
{"Mesh","Malha"},
{"Clock skew","Defasagem do Relógio"},
{"Clock skew","Desvio de Relógio"},
{"Offline","Desligado"},
{"Symmetric NAT","NAT Simétrico"},
{"Full cone NAT","Full cone NAT"},
@ -69,11 +69,12 @@ namespace portuguese // language namespace
{"Stopping in","Parando em"},
{"Family","Família"},
{"Tunnel creation success rate","Taxa de sucesso na criação de túneis"},
{"Total tunnel creation success rate","Taxa total de sucesso na criação de túneis"},
{"Received","Recebido"},
{"%.2f KiB/s","%.2f KiB/s"},
{"Sent","Enviado"},
{"Transit","Trânsito"},
{"Data path","Diretório dos dados"},
{"Data path","Diretório de dados"},
{"Hidden content. Press on text to see.","Conteúdo oculto. Clique no texto para revelar."},
{"Router Ident","Identidade do Roteador"},
{"Router Family","Família do Roteador"},
@ -95,6 +96,7 @@ namespace portuguese // language namespace
{"Address","Endereço"},
{"Type","Tipo"},
{"EncType","Tipo de Criptografia"},
{"Expire LeaseSet","Expirar LeaseSet"},
{"Inbound tunnels","Túneis de Entrada"},
{"%dms","%dms"},
{"Outbound tunnels","Túneis de Saída"},
@ -104,11 +106,12 @@ namespace portuguese // language namespace
{"Destination","Destinos"},
{"Amount","Quantidade"},
{"Incoming Tags","Etiquetas de Entrada"},
{"Tags sessions","Sessões de etiquetas"},
{"Tags sessions","Sessões de Etiquetas"},
{"Status","Estado"},
{"Local Destination","Destinos Locais"},
{"Local Destination","Destino Local"},
{"Streams","Fluxos"},
{"Close stream","Fechar fluxo"},
{"Such destination is not found","Tal destino não foi encontrado"},
{"I2CP session not found","Sessão do I2CP não encontrada"},
{"I2CP is not enabled","I2CP não está ativado"},
{"Invalid","Inválido"},
@ -145,42 +148,43 @@ namespace portuguese // language namespace
{"Invalid token","Token Inválido"},
{"SUCCESS","SUCESSO"},
{"Stream closed","Fluxo fechado"},
{"Stream not found or already was closed","Fluxo não encontrado ou já encerrado"},
{"Stream not found or already was closed","Fluxo não encontrado ou já fechado"},
{"Destination not found","Destino não encontrado"},
{"StreamID can't be null","StreamID não pode ser nulo"},
{"Return to destination page","Retornar para à página de destino"},
{"You will be redirected in %d seconds","Você será redirecionado em %d segundos"},
{"LeaseSet expiration time updated","Tempo de validade do LeaseSet atualizado"},
{"LeaseSet is not found or already expired","LeaseSet não foi encontrado ou já expirou"},
{"Transit tunnels count must not exceed %d","A contagem de túneis de trânsito não deve exceder %d"},
{"Back to commands list","Voltar para a lista de comandos"},
{"Register at reg.i2p","Registrar na reg.i2p"},
{"Register at reg.i2p","Registrar em reg.i2p"},
{"Description","Descrição"},
{"A bit information about service on domain","Algumas informações sobre o serviço no domínio"},
{"Submit","Enviar"},
{"Domain can't end with .b32.i2p","O domínio não pode terminar com .b32.i2p"},
{"Domain must end with .i2p","O domínio não pode terminar com .i2p"},
{"Such destination is not found","Tal destino não foi encontrado"},
{"Unknown command","Comando desconhecido"},
{"Command accepted","Comando aceito"},
{"Proxy error","Erro no proxy"},
{"Proxy info","Informações do proxy"},
{"Proxy error: Host not found","Erro no proxy: Host não encontrado"},
{"Remote host not found in router's addressbook","O host remoto não foi encontrado no livro de endereços do roteador"},
{"You may try to find this host on jump services below","Você pode tentar encontrar este host nos jump services abaixo"},
{"You may try to find this host on jump services below","Você pode tentar encontrar este host nos serviços de jump abaixo"},
{"Invalid request","Requisição inválida"},
{"Proxy unable to parse your request","O proxy foi incapaz de processar a sua requisição"},
{"Addresshelper is not supported","O Auxiliar de Endereços não é suportado"},
{"Host %s is <font color=red>already in router's addressbook</font>. <b>Be careful: source of this URL may be harmful!</b> Click here to update record: <a href=\"%s%s%s&update=true\">Continue</a>.","O host %s já <font color=red>está no catálogo de endereços do roteador</font>. <b>Cuidado: a fonte desta URL pode ser perigosa!</b> Clique aqui para atualizar o registro: <a href=\"%s%s%s&update=true\">Continuar</a>."},
{"Addresshelper forced update rejected","A atualização forçada do Auxiliar de Endereços foi rejeitada"},
{"To add host <b>%s</b> in router's addressbook, click here: <a href=\"%s%s%s\">Continue</a>.","Para adicionar o host <b> %s </b> ao catálogo de endereços do roteador, clique aqui: <a href='%s%s%s'>Continuar </a>."},
{"Addresshelper request","Requisição do Auxiliar de Endereços"},
{"Host %s added to router's addressbook from helper. Click here to proceed: <a href=\"%s\">Continue</a>.","O host %s foi adicionado ao catálogo de endereços do roteador por um auxiliar. Clique aqui para proceder: <a href='%s'> Continuar </a>."},
{"Addresshelper request","Requisição ao Auxiliar de Endereços"},
{"Host %s added to router's addressbook from helper. Click here to proceed: <a href=\"%s\">Continue</a>.","O host %s foi adicionado ao catálogo de endereços do roteador por um auxiliar. Clique aqui para prosseguir: <a href='%s'> Continuar </a>."},
{"Addresshelper adding","Auxiliar de Endereço adicionando"},
{"Host %s is <font color=red>already in router's addressbook</font>. Click here to update record: <a href=\"%s%s%s&update=true\">Continue</a>.","O host %s já <font color=red>está no catálogo de endereços do roteador </font>. Clique aqui para atualizar o registro: <a href=\"%s%s%s&update=true\">Continuar</a>."},
{"Addresshelper update","Atualização do Auxiliar de Endereços"},
{"Invalid request URI","A URI de requisição é inválida"},
{"Can't detect destination host from request","Incapaz de detectar o host de destino da requisição"},
{"Outproxy failure","Falha no outproxy"},
{"Bad outproxy settings","Configurações ruins de outproxy"},
{"Bad outproxy settings","Má configurações do outproxy"},
{"Host %s is not inside I2P network, but outproxy is not enabled","O host %s não está dentro da rede I2P, mas o outproxy não está ativado"},
{"Unknown outproxy URL","URL de outproxy desconhecida"},
{"Cannot resolve upstream proxy","Não é possível resolver o proxy de entrada"},
("limits.coresize",value<uint32_t>()->default_value(0),"Maximum size of corefile in Kb (0 - use system limit)")
("limits.openfiles",value<uint16_t>()->default_value(0),"Maximum number of open files (0 - use system default)")
("limits.transittunnels",value<uint16_t>()->default_value(5000),"Maximum active transit tunnels (default:5000)")
("limits.transittunnels",value<uint32_t>()->default_value(10000),"Maximum active transit tunnels (default:10000)")
("limits.zombies",value<double>()->default_value(0),"Minimum percentage of successfully created tunnels under which tunnel cleanup is paused (default [%]: 0.00)")
LogPrint(eLogError,"Destination: Can't publish LeaseSet. No inbound tunnels");
}
else
LogPrint(eLogError,"Destination: Can't publish LeaseSet. No outbound tunnels");
}
else
LogPrint(eLogError,"Destination: Can't publish LeaseSet. No outbound tunnels");
}
LogPrint(eLogError,"Destination: Can't publish LeaseSet, no more floodfills found");
}
else
LogPrint(eLogError,"Destination: Can't publish LeaseSet, no more floodfills found");
LogPrint(eLogDebug,"Destination: No tunnels in pool");
if(!floodfill||!outbound||!inbound)
{
// we can't publish now
m_ExcludedFloodfills.clear();
m_PublishReplyToken=1;// dummy non-zero value
// try again after a while
LogPrint(eLogInfo,"Destination: Can't publish LeasetSet because destination is not ready. Try publishing again after ",PUBLISH_CONFIRMATION_TIMEOUT," seconds");
LogPrint(eLogDebug,"NetDbReq: Try ",dest->GetDestination().ToBase64()," at ",count," floodfill ",nextFloodfill->GetIdentHash().ToBase64()," through tunnels");