Summary: | <declspec.h> from =net-libs/libnatpmp-20140401-r1 clashes with <miniupnpc/declspec.h> from =net-libs/miniupnpc-1.9.20150427: affects both net-misc/tor and net-p2p/transmission | ||
---|---|---|---|
Product: | Gentoo Linux | Reporter: | r3lgar <r3lgar> |
Component: | Current packages | Assignee: | Anthony Basile <blueness> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | aoz.syn, candrews, mgorny, nikoli, polidevk.polidevk, saintdev |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
URL: | http://miniupnp.tuxfamily.org/forum/viewtopic.php?p=4379#4379 | ||
See Also: | https://bugs.gentoo.org/show_bug.cgi?id=506832 | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Attachments: |
build log
tor-fw-helper.i |
Description
r3lgar
2015-04-29 16:43:56 UTC
Confirmed here too. Of course, building net-misc/tor-0.2.6.7 with USE='-upnp' temporarily avoided the issue. Can you try with =net-libs/miniupnpc-1.9.20150427. The version in the title was buggy and taken off the tree. Its working for me with 1.9.20150427. (In reply to Anthony Basile from comment #2) > Can you try with =net-libs/miniupnpc-1.9.20150427. The version in the title > was buggy and taken off the tree. Its working for me with 1.9.20150427. okay no response and I've tested and it works for me. Please reopen if this is still a problem. Sorry, no - I'd only eyeballed the package name and not the version when I confirmed. I'm seeing it building against =net-libs/miniupnpc-1.9.20150427. Dumb question, you are building net-misc/tor with USE=upnp? (In reply to RB from comment #4) > Sorry, no - I'd only eyeballed the package name and not the version when I > confirmed. I'm seeing it building against =net-libs/miniupnpc-1.9.20150427. > > Dumb question, you are building net-misc/tor with USE=upnp? Yes of course I'm using USE=upnp. 1.9.20150424 (note ending in 24) was taken off the tree and replaced by 1.9.20150427 (ending in 27). tor with USE=upnp builds against the 27 version. (in reply to comment #5) > tor with USE=upnp builds against the 27 version. Unfortunately, for me it does not. Emerge --info follows, but compiling net-misc/tor-0.2.6.7 with USE=upnp results in the exact same error the OP's build.log describes, an excerpt from my own pasted below: In file included from src/tools/tor-fw-helper/tor-fw-helper-upnp.h:14:0, from src/tools/tor-fw-helper/tor-fw-helper.c:36: /usr/include/miniupnpc/miniwget.h:17:18: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’ MINIUPNP_LIBSPEC void * getHTTPResponse(int s, int * size); ================================================= $ emerge --info net-misc/tor net-libs/miniupnpc Portage 2.2.18 (python 2.7.9-final-0, default/linux/amd64/13.0, gcc-4.9.2, glibc-2.20-r2, 4.0.1-gentoo x86_64) ================================================================= System Settings ================================================================= System uname: Linux-4.0.1-gentoo-x86_64-Intel-R-_Core-TM-_i7-4900MQ_CPU_@_2.80GHz-with-gentoo-2.2 KiB Mem: 32952788 total, 23075316 free KiB Swap: 9048936 total, 9048936 free Timestamp of repository gentoo: Tue, 05 May 2015 17:00:01 +0000 sh bash 4.3_p33-r2 ld GNU ld (Gentoo 2.25 p1.0) 2.25 app-shells/bash: 4.3_p33-r2::gentoo dev-java/java-config: 2.2.0::gentoo dev-lang/perl: 5.20.2::gentoo dev-lang/python: 2.7.9-r2::gentoo, 3.3.5-r1::gentoo, 3.4.3::gentoo dev-util/cmake: 3.2.1::gentoo dev-util/pkgconfig: 0.28-r2::gentoo sys-apps/baselayout: 2.2::gentoo sys-apps/openrc: 0.13.11::pentoo sys-apps/sandbox: 2.6-r1::gentoo sys-devel/autoconf: 2.13::gentoo, 2.69-r1::gentoo sys-devel/automake: 1.11.6-r1::gentoo, 1.12.6::gentoo, 1.13.4::gentoo, 1.14.1::gentoo, 1.15::gentoo sys-devel/binutils: 2.25::gentoo sys-devel/gcc: 4.8.4::gentoo, 4.9.2::gentoo sys-devel/gcc-config: 1.8::gentoo sys-devel/libtool: 2.4.6-r1::gentoo sys-devel/make: 4.1-r1::gentoo sys-kernel/linux-headers: 4.0::gentoo (virtual/os-headers) sys-libs/glibc: 2.20-r2::gentoo Repositories: gentoo location: /usr/portage sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 local location: /usr/local/portage masters: gentoo pentoo priority: 0 pentoo location: /var/lib/layman/pentoo masters: gentoo priority: 50 sunrise location: /var/lib/layman/sunrise masters: gentoo priority: 50 virtualization location: /var/lib/layman/virtualization masters: gentoo priority: 50 vmware location: /var/lib/layman/vmware masters: gentoo priority: 50 Installed sets: @nmrebuild ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="* -@EULA AdobeFlash-11.x Intel-SDP NVIDIA-CUDA TeamViewer Vivaldi" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-Os -march=core-avx2 -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /etc/conf.d/openconnect /etc/init.d/openconnect /etc/stunnel/stunnel.conf /usr/lib64/libreoffice/program/sofficerc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.6/ext-active/ /etc/php/cgi-php5.6/ext-active/ /etc/php/cli-php5.6/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c" CXXFLAGS="-Os -march=core-avx2 -pipe" DISTDIR="/usr/portage/distfiles" EMERGE_DEFAULT_OPTS="--with-bdeps=y --misspell-suggestions=n" FCFLAGS="-Os -mtune=nocona -pipe -frecord-gcc-switches" FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync multilib-strict news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-Os -mtune=nocona -pipe -frecord-gcc-switches" GENTOO_MIRRORS="http://distfiles.gentoo.org" INSTALL_MASK="/usr/lib/debug" LANG="en_US.utf8" LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--hash-style=gnu" MAKEOPTS="-j8" PKGDIR="/usr/portage/packages" PORTAGE_BZIP2_COMMAND="lbzip2" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_EXTRA_OPTS="-P" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/tmp" USE="X a52 aac acl acpi adns ads aff all_sfx alsa amd64 audit berkdb binary-drivers bluetooth branding bzip2 cairo caps cdda cdr cli clipboard consolekit cracklib crypt cuda cups curl cxx dbus device-mapper directfb dri dts dvd dvdr emboss encode ewf exif fam fbcon fcoe firefox firewalld flac fortran freerdp fuse gcrypt gdbm gif git gksu glamor gnome-keyring gpg gpm gps graph gssapi gtk gtk2 iconv ipv6 ithreads jack jpeg lapack lcms ldap libnotify libopts libproxy lm_sensors lua lvm lxc lzma lzo lzo4 mad mmx mmxext mng modemmanager modules mp3 mp4 mpeg multilib ncurses networkmanager nfs nls nptl ogg opencl opengl openmp oss pam pam_ssh pango passwdqc pcre pcre16 pdf pentoo perl png policykit ppds pulseaudio python qemu qt3support qt4 rar raw readline rtl rtlsdr ruby samba sdl seccomp session smp spell sqlite squashfs sse sse2 ssh ssl startup-notification subversion svg tcpd theora threads tiff truetype udev udisks unicode upnp upower usb uuid vdpau vim-syntax vorbis wxwidgets x264 xattr xcb xinerama xml xrandr xv xvid zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="coreboot efi-32 efi-64 emu multiboot pc qemu" INPUT_DEVICES="evdev keyboard mouse synaptics synaptics" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en_US en" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" QEMU_SOFTMMU_TARGETS="arm armeb i386 x86_64 mips mips64 mipsel mips64el ppc ppc64 sparc sparc64" QEMU_USER_TARGETS="arm armeb i386 x86_64 microblaze mips mips64 mipsel mips64el ppc ppc64 sparc sparc64" RUBY_TARGETS="ruby19 ruby20 ruby21" USERLAND="GNU" VIDEO_CARDS="intel nouveau nvidia qxl vmware" XFCE_PLUGINS="brightness menu logout trash" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: CPPFLAGS, CTARGET, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, USE_PYTHON ================================================================= Package Settings ================================================================= net-misc/tor-0.2.6.7::gentoo was built with the following: USE="nat-pmp seccomp tor-hardening transparent-proxy -bufferevents -scrypt (-selinux) -stats -systemd -test -upnp -web" ABI_X86="64" net-libs/miniupnpc-1.9.20150427::gentoo was built with the following: USE="ipv6 -static-libs" ABI_X86="64" (In reply to Anthony Basile from comment #2) With =net-libs/miniupnpc-1.9.20150427 nothing changes. (In reply to RB from comment #6) > (in reply to comment #5) > > tor with USE=upnp builds against the 27 version. > > Unfortunately, for me it does not. Emerge --info follows, but compiling > net-misc/tor-0.2.6.7 with USE=upnp results in the exact same error the OP's > build.log describes, an excerpt from my own pasted below: > I'm still not hitting this so something is different. To be clear, what flag combination did you use? The flags below have USE=-upnp. Also you have both gcc-4.8.4 and 4.9.2. Does it fail with both? > > net-misc/tor-0.2.6.7::gentoo was built with the following: > USE="nat-pmp seccomp tor-hardening transparent-proxy -bufferevents -scrypt > (-selinux) -stats -systemd -test -upnp -web" ABI_X86="64" > > > net-libs/miniupnpc-1.9.20150427::gentoo was built with the following: > USE="ipv6 -static-libs" ABI_X86="64" > I'm still not hitting this so something is different. To be clear, what
> flag combination did you use? The flags below have USE=-upnp.
>
> Also you have both gcc-4.8.4 and 4.9.2. Does it fail with both?
>
Follow up on the above, can you guys give me the output of
1) gcc -v
2) gcc -E /usr/include/miniupnpc/miniwget.h
Make sure you use the same version of gcc as the one that's failing.
For background and clarity, this is a Pentoo-originated system running ~amd64 and USE="upnp" set globally in make.conf. The USE="-upnp" for net-misc/tor was to get it rebuilt and working again, but subsequent attempts to build with USE="upnp" (since that is my default) fail. I am defaulting to gcc-4.9.2 (have done "emerge -eD world" since switching), and gcc-4.8.4 (gcc-config x86_64-pc-linux-gnu-4.8.4 && env-update && . /etc/profile) fails in the same way. $ gcc -v Using built-in specs. COLLECT_GCC=/usr/x86_64-pc-linux-gnu/gcc-bin/4.9.2/gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/4.9.2/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /var/tmp/portage/sys-devel/gcc-4.9.2/work/gcc-4.9.2/configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/4.9.2 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.9.2 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.9.2/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.9.2/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4 --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/4.9.2/python --enable-languages=c,c++,fortran --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.9.2 p1.3, pie-0.6.2' --enable-libstdcxx-time --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-multilib --with-multilib-list=m32,m64 --disable-altivec --disable-fixed-point --enable-targets=all --disable-libgcj --enable-libgomp --disable-libmudflap --disable-libssp --disable-libcilkrts --enable-lto --without-cloog --enable-libsanitizer Thread model: posix gcc version 4.9.2 (Gentoo 4.9.2 p1.3, pie-0.6.2) ######### Output of gcc -E (...) : $ gcc -E /usr/include/miniupnpc/miniwget.h # 1 "/usr/include/miniupnpc/miniwget.h" # 1 "<built-in>" # 1 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 1 "<command-line>" 2 # 1 "/usr/include/miniupnpc/miniwget.h" # 11 "/usr/include/miniupnpc/miniwget.h" # 1 "/usr/include/miniupnpc/declspec.h" 1 # 12 "/usr/include/miniupnpc/miniwget.h" 2 __attribute__ ((visibility ("default"))) void * getHTTPResponse(int s, int * size); __attribute__ ((visibility ("default"))) void * miniwget(const char *, int *, unsigned int); __attribute__ ((visibility ("default"))) void * miniwget_getaddr(const char *, int *, char *, int, unsigned int); int parseURL(const char *, char *, unsigned short *, char * *, unsigned int *); (In reply to RB from comment #10) > For background and clarity, this is a Pentoo-originated system running > ~amd64 and USE="upnp" set globally in make.conf. your results are correct so far. try running the following command and let me know if it throws any kind of error: echo '__attribute__ ((visibility ("default"))) void * getHTTPResponse(int s, int * size);' | gcc -x c -c -o /dev/null - > comment #11
That returns with no output, return code 0.
(In reply to RB from comment #12) > > comment #11 > That returns with no output, return code 0. So I don't get what's going on here. The original error shows that the macro MINIUPNP_LIBSPEC is not being expanded in <miniupnpc/miniwget.h> despited the fact that it does #include "declspec.h" which defines it. Yes a direct test (comment #10) shows that the declspec.h is being included, that MINIUPNP_LIBSPEC is being expanded, and that the compiler understands the __attribute__ (comment #12). (If this wasn't the case, you'd have a lot of other problems, but we had to check.) However, in the context of the tor build system this is not happening. Since I can't reproduce this I can only suggest debugging techniques at your end. Wait till the build breaks, then cd into the src directory and try running the following manually. Run variations of it, try adding -I's and poke around to see why declspec.h is not being included. Sorry I can't be much more help. x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I"./src/ext" -I./src/common -march=native -O2 -pipe -fasynchronous-unwind-tables -Wall -fno-strict-aliasing -c -o src/tools/tor-fw-helper/src_tools_tor_fw_helper_tor_fw_helper-tor-fw-helper-natpmp.o `test -f 'src/tools/tor-fw-helper/tor-fw-helper-natpmp.c' || echo './'`src/tools/tor-fw-helper/tor-fw-helper-natpmp.c > debugging techniques
In which case it'll probably be several days (next week) until I can get to this, I have other production matters to attend to. Hopefully someone else encounters it and/or has some time to debug in the interim.
The issue appears to be that __GNUC__ is not defined or >= 4 when make invokes GCC in the following manner (from comment #13 and the observed failures): x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I"./src/ext" -I./src/common -march=native -O2 -pipe -fasynchronous-unwind-tables -Wall -fno-strict-aliasing -c -o src/tools/tor-fw-helper/src_tools_tor_fw_helper_tor_fw_helper-tor-fw-helper-natpmp.o `test -f 'src/tools/tor-fw-helper/tor-fw-helper-natpmp.c' || echo './'`src/tools/tor-fw-helper/tor-fw-helper-natpmp.c It is, however, set appropriately when running a bare "gcc -E". Sorry for the bugspam. It's also worth pointing out that net-misc/tor-0.2.6.7[upnp] builds perfectly well against net-libs/miniupnpc-1.8 (marked stable). (In reply to RB from comment #15) > The issue appears to be that __GNUC__ is not defined or >= 4 when make > invokes GCC in the following manner (from comment #13 and the observed > failures): > > x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I"./src/ext" > -I./src/common -march=native -O2 -pipe -fasynchronous-unwind-tables > -Wall -fno-strict-aliasing -c -o > src/tools/tor-fw-helper/src_tools_tor_fw_helper_tor_fw_helper-tor-fw-helper- > natpmp.o `test -f 'src/tools/tor-fw-helper/tor-fw-helper-natpmp.c' || echo > './'`src/tools/tor-fw-helper/tor-fw-helper-natpmp.c > > It is, however, set appropriately when running a bare "gcc -E". This doesn't make sense to me because if __GNUC__ were not defined or not >= 4 then the header falls back to an empty definition of MINIUPNP_LIBSPEC which would build but not give miniwget() and friends hidden visibility. I'm cc-ing the maintainers of miniunpnc to see if they can make sense of this. Created attachment 403838 [details]
tor-fw-helper.i
Here is a preprocessed tor-fw-helper.c showing MINIUPNP_LIBSPEC never gets set.
Also notice that before including <miniupnp/declspec.h>, <declspec.h> is included by <natpmp.h> both set the DECLSPEC_H_INCLUDED macro. This results in the entire <miniupnp/declspec.h> file never being processed. As the <declspec.h> file only defines LIBSPEC not MINIUPNP_LIBSPEC, it never gets defined!
(In reply to Nathan Caldwell from comment #18) > Created attachment 403838 [details] > tor-fw-helper.i > > Here is a preprocessed tor-fw-helper.c showing MINIUPNP_LIBSPEC never gets > set. > > Also notice that before including <miniupnp/declspec.h>, <declspec.h> is > included by <natpmp.h> both set the DECLSPEC_H_INCLUDED macro. This results > in the entire <miniupnp/declspec.h> file never being processed. As the > <declspec.h> file only defines LIBSPEC not MINIUPNP_LIBSPEC, it never gets > defined! Thanks that's what I needed. Right now we have a bit of a mess with libnatpmp and miniupnpc which is why I wasn't hitting this. Can you give me your versions of net-libs/miniupnpc and net-libs/libnatpmp so I can compare to what I'm getting at this end and make sure we're on the same page. Both packages are from the same upstream and I've made upstream aware. See ${URL}. In the meant time, I recommend renaming <miniupnpc/declspec.h> to <miniupnpc/miniupnpc-declspec.h> and changing DECLSPEC_H_INCLUDED to MINIUPNPC-DECLSPEC_H_INCLUDED. Good news, everyone! miniupnpc-1.9.20150917 renames this file, so the issue is solved. Now we just need to fix all reverse dependencies to use the new API. (In reply to Michał Górny from comment #21) > Good news, everyone! miniupnpc-1.9.20150917 renames this file, so the issue > is solved. Now we just need to fix all reverse dependencies to use the new > API. Ironically tor-0.2.7.x dropped libnatpmp. But this is good news. I did report it upstream but the last I heard they weren't sure how to fix it. I guess they came up with something. |