getdnsapi / getdns

A modern asynchronous DNS API https://getdnsapi.net/
Other
468 stars 126 forks source link

Unable to build on Debian 9 #395

Closed mire3212 closed 6 years ago

mire3212 commented 6 years ago

While running the configure command, the following error is produced:

configure: error: Missing dependencies: libidn2

Instructions found here: https://dnsprivacy.org/wiki/pages/viewpage.action?pageId=3145786

configure is being run as follows from the build directory:

../configure --prefix=/usr/local/bin --without-libidn --enable-stub-only --with-stubby

$uname -a
Linux cloud.bitson.io 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux
$cat /etc/debian_version
9.4
dpkg -l | grep libidn
ii  libidn11:amd64                    1.33-1                                         amd64        GNU Libidn library, implementation of IETF IDN specifications
ii  libidn11-dev                      1.33-1                                         amd64        Development files for GNU Libidn, an IDN library
ii  libidn2-0:amd64                   0.16-1+deb9u1                                  amd64        Internationalized domain names (IDNA2008) library
ii  libidn2-0-dev                     0.16-1+deb9u1                                  amd64        Internationalized domain names (IDNA2008) development files
hanvinke commented 6 years ago

Nasty problem 🤔 Does compiling with --without-libidn --without-libidn2 together also fails? Because on Arch Linux it checks for both libidn and for libidn2.

--without-libidn: "configure: Checking for dependency libidn2 checking for idn2_to_unicode_8z8z in -lidn2... yes

--without-libidn2: configure: Checking for dependency libidn checking for idna_to_ascii_8z in -lidn... yes"

2018-04-21 20:01 GMT+02:00 mire3212 notifications@github.com:

While running the ./configure script, the following error is produced:

configure: error: Missing dependencies: libidn2

./configure is being run as follows from the build directory:

../configure --prefix=/usr/local/bin --without-libidn --enable-stub-only --with-stubby

$uname -a Linux cloud.bitson.io 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux

$cat /etc/debian_version 9.4

dpkg -l | grep libidn ii libidn11:amd64 1.33-1 amd64 GNU Libidn library, implementation of IETF IDN specifications ii libidn11-dev 1.33-1 amd64 Development files for GNU Libidn, an IDN library ii libidn2-0:amd64 0.16-1+deb9u1 amd64 Internationalized domain names (IDNA2008) library ii libidn2-0-dev 0.16-1+deb9u1 amd64 Internationalized domain names (IDNA2008) development files

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/getdnsapi/getdns/issues/395, or mute the thread https://github.com/notifications/unsubscribe-auth/AYbTSWIcz2GpUmX7h_pqRQ1NQ_1fqKAOks5tq3QRgaJpZM4Tejgt .

mire3212 commented 6 years ago

I am able to finish the configure and then subsequently run make to completion. I was able to start stubby but haven’t been able to test that it works as expected yet.

hanvinke commented 6 years ago

Thank you, good news! Could you also test whether compiling with only --without-libidn2 also works? Your problem seem to indicate there is a problem with the app finding the libidn2 library. As I can see in the code it is checking for the file idn2.h, could you check if it is in one of the subdirectories? The compiler checks in /usr/local /opt/local /usr/pkg /usr/sfw

mire3212 commented 6 years ago

This works:

../configure --prefix=/usr/local/bin --enable-stub-only --with-stubby --without-libidn2

I was then able to do a make clean and make without issue.

The path the idn2.h is /usr/include/idn2.h.

hanvinke commented 6 years ago

Very helpful, thank you again.

A last request from me, does compiling with --with-libidn2=/usr/include also work? If compiling including the path also works for libidn2 then the bug is probably solved. The devs need only to add the /usr/include search path to the libnidn2 library.

It is a little bit strange though that the compiler adds a search for the 'other' libnidn version when choosing --without-PACKAGE. It is not something obvious in my opinion. I suspect that if you had only libidn installed, that compiling with --without-libidn would not have given an error at all. Maybe that needs some programming too, it seems that for now adding the path is mandatory with 2 versions installed and probably not just in Debian. BTW you only need libidn2 for getdns, libidn is deprecated but still mandatory for some other programs [sorry, had to edit that]

mire3212 commented 6 years ago

../configure --prefix=/usr/local/bin --enable-stub-only --with-stubby --without-libidn --with-libidn2=/usr/include/ does not work. Still says

configure: error: Missing dependencies: libidn2
hanvinke commented 6 years ago

A pity, looked promising. Probably doesn't matter, but does it make a difference without the slash? --with-libidn2=/usr/include instead of --with-libidn2=/usr/include/ and without --without-libidn?

mire3212 commented 6 years ago

Nope :(

I did try both, but that was the last one I tried and just copied it since it was the last one ran.

hanvinke commented 6 years ago

So far we can say the compiler for idn2.h only looks in the subdirectories of /usr/local /opt/local /usr/pkg /usr/sfw, but not directly in /usr/include/idn2.h (see lines 13870-and up). So if it would have been installed in /usr/local/include/idn2.h it would have been found. Also why line 13887 #LDFLAGS="$LDFLAGS -L/usr/lib" is not uncommented - I don't know.

hanvinke commented 6 years ago

Oh, what I wanted to add - when compiling with ../configure --without-libidn --with-libidn2=/usr/include : --without-libidn makes the compiler first search for libidn2 and then tries to install that with that option enabled [same as --with-libidn2]. And because the path cannot be found of libidn2 it generates configure: error: Missing dependencies: libidn2 .

wtoorop commented 6 years ago

@havinke The argument passed to --with-* whould be the base directory containing the include and lib directory, however, you'd never have to pass it a /usr because /usr/include and /usr/lib are assumed to be scanned always. When you have both libidn and libidn2 installed, getdns prefers building with libidn2. Passing it the --without-libidn option should not make a difference in that case. I can probably tell you what caused the error if you send me the config.log file, but if you really want to compile getdns without IDNA support, you could also pass both the --without-libidn and --without-libidn2 options.

mire3212 commented 6 years ago

Here's a link to a pastebin of the config.log file.

https://pastebin.com/2rVJ6qnT

I ran this:

../configure --prefix=/usr/local/bin --enable-stub-only --with-stubby --without-libidn

And got the usual error:

configure: error: Missing dependencies: libidn2

santiagorr commented 6 years ago

El 23/04/18 a las 14:00, mire3212 escribió:

Here's a link to a pastebin of the config.log file.

https://pastebin.com/2rVJ6qnT

I ran this:

../configure --prefix=/usr/local/bin --enable-stub-only --with-stubby --without-libidn

And got the usual error:

configure: error: Missing dependencies: libidn2

Just in case, do you know getdns and stuby are included in Debian? https://tracker.debian.org/pkg/getdns

If you want to build the latest version in Debian 9, you could take a look at how it's build in Debian: https://sources.debian.org/src/getdns/1.4.1-1/debian/rules/ And build logs, for the latest version in debian unstable: https://buildd.debian.org/status/fetch.php?pkg=getdns&arch=amd64&ver=1.4.1-1&stamp=1521203920&raw=0

HTH,

Santiago

hanvinke commented 6 years ago

Package check was not found in the pkg-config search path. Could you do: _export PKG_CONFIGPATH=/usr/bin/pkg-config

mire3212 commented 6 years ago

Same failure. I ran the following:

# which pkg-config
/usr/bin/pkg-config
# export PKG_CONFIG_PATH=/usr/bin/pkg-config
# echo $PKG_CONFIG_PATH
/usr/bin/pkg-config
# ../configure --prefix=/usr/local/bin --enable-stub-only --with-stubby --without-libidn
...
configure: error: Missing dependencies: libidn2
hanvinke commented 6 years ago

Could you also check _echo LD_LIBRARYPATH and if not set run _export LD_LIBRARYPATH=/usr/local/lib?

mire3212 commented 6 years ago

Same issue:

export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/bin/pkg-config
../configure --prefix=/usr/local/bin --without-libidn --enable-stub-only --with-stubby
...
configure: error: Missing dependencies: libidn2

I've added a new pastebin with the latest config.log file.

hanvinke commented 6 years ago

It also mentions configure: failed program was:| / confdefs.h / It seems to indicate missing glibc-devel

mire3212 commented 6 years ago

I have the following from dpkg -l (among others)

ii  linux-libc-dev:amd64              4.9.82-1+deb9u3                                amd64        Linux support headers for userspace development
ii  libc6:amd64                       2.24-11+deb9u3                                 amd64        GNU C Library: Shared libraries
ii  libc6-dev:amd64                   2.24-11+deb9u3                                 amd64        GNU C Library: Development Libraries and Header Files

Is this the same? I have others, but I'm not sure which package specifically correlates to the Debian equivalent of glibc-devel

hanvinke commented 6 years ago

Never mind, in my log there are also errors with confdefs.h. Will look further. Keep the spirits up!

hanvinke commented 6 years ago

This error message I also do not have: WARNING: libcheck not found or usable; unit tests will not be compiled and run You could try: sudo apt-get install check

mire3212 commented 6 years ago

Done, and the WARNING: libcheck not found message is gone, but it didn't affect the missing libidn2.

hanvinke commented 6 years ago

Well, Santiagorr had some very useful info. In the long list of new to be installed programs there is also libidn2-dev.

wtoorop commented 6 years ago

@mire3212 Thanks, getdns uses and tests for function idn2_to_unicode_8z8z() which is available in libidn2 since version 2.0.0. You have version 0.16, so the function is not in there yet.

wtoorop commented 6 years ago

The upcoming 1.4.2 release will have updated configure and README.md to clarify that you need libidn2 version 2.0.0 or higher. Thanks for the report!