Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build fails on ARM without -fpermissive because of a GCC bug in arm_acle.h #550

Closed
sbraz opened this issue Jun 2, 2018 · 34 comments

Comments

Projects
None yet
4 participants
@sbraz
Copy link
Contributor

commented Jun 2, 2018

As reported downstream here: https://bugs.gentoo.org/657030
GCC bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81497
I'm going to add -fpermissive for ARM builds until the GCC bug is fixed, maybe you should do it too.

In file included from lib/yencode/AcleCrc.cpp:26:0:
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_ldc(unsigned int, unsigned int, const void*)’:                                                                                
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:48:49: error: invalid conversion from ‘const void*’ to ‘const int*’ [-fpermissive]                                                                     
   return __builtin_arm_ldc (__coproc, __CRd, __p);
                                                 ^                                                                                                                                                                          
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_ldc(unsigned int, unsigned int, const int*)’                                                                                                             
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_ldcl(unsigned int, unsigned int, const void*)’:                                                                               
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:55:50: error: invalid conversion from ‘const void*’ to ‘const int*’ [-fpermissive]                                                                     
   return __builtin_arm_ldcl (__coproc, __CRd, __p);
                                                  ^
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_ldcl(unsigned int, unsigned int, const int*)’                                                                                                            
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_stc(unsigned int, unsigned int, void*)’:                                                                                      
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:62:49: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]                                                                                 
   return __builtin_arm_stc (__coproc, __CRd, __p);
                                                 ^
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_stc(unsigned int, unsigned int, int*)’                                                                                                                   
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_stcl(unsigned int, unsigned int, void*)’:                                                                                     
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:69:50: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]                                                                                 
   return __builtin_arm_stcl (__coproc, __CRd, __p);
                                                  ^
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_stcl(unsigned int, unsigned int, int*)’                                                                                                                  
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_ldc2(unsigned int, unsigned int, const void*)’:                                                                               
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:100:50: error: invalid conversion from ‘const void*’ to ‘const int*’ [-fpermissive]                                                                    
   return __builtin_arm_ldc2 (__coproc, __CRd, __p);
                                                  ^
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_ldc2(unsigned int, unsigned int, const int*)’                                                                                                            
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_ldc2l(unsigned int, unsigned int, const void*)’:                                                                              
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:107:51: error: invalid conversion from ‘const void*’ to ‘const int*’ [-fpermissive]                                                                    
   return __builtin_arm_ldc2l (__coproc, __CRd, __p);
                                                   ^
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_ldc2l(unsigned int, unsigned int, const int*)’                                                                                                           
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_stc2(unsigned int, unsigned int, void*)’:                                                                                     
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:114:50: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]                                                                                
   return __builtin_arm_stc2 (__coproc, __CRd, __p);
                                                  ^
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_stc2(unsigned int, unsigned int, int*)’                                                                                                                  
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h: In function ‘void __arm_stc2l(unsigned int, unsigned int, void*)’:                                                                                    
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/7.3.0/include/arm_acle.h:121:51: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]                                                                                
   return __builtin_arm_stc2l (__coproc, __CRd, __p);
                                                   ^
<built-in>: note:   initializing argument 3 of ‘void __builtin_arm_stc2l(unsigned int, unsigned int, int*)’
make[1]: *** [Makefile:1765: lib/yencode/AcleCrc.o] Error 1
make[1]: *** Waiting for unfinished jobs....```
@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 2, 2018

No problems building on ARM (ARM64) on Ubuntu 16.04 / Armbian with g++ version 5.4.0

No problems building on ARM (ARM64) on Ubuntu 18.04 with g++ version 7.3.0

So ... @sbraz ... what is your setup? Which OS, which g++ verison ?

@sbraz

This comment has been minimized.

Copy link
Contributor Author

commented Jun 2, 2018

@sanderjo I'm the maintainer, not the original reporter, I don't have an ARM server at the moment :/
I guess that __ARM_FEATURE_CRC32 was not defined for you and that it was for the original reporter, so you never included the problematic arm_acle.h.

From what I understand by reading this, you may have to change your CXXFLAGS to enable this feature, what happens if you set -march=armv8-a+crc?

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 2, 2018

-march=armv8-a+crc is always set for file AcleCrc.cpp when compiling for ARM target. I think the flag should be visible in build output.

The flag is set by configure. I guess I could add -fpermissive there if clang supports it too (otherwise I would need to add the flag conditionally only for GCC).

@sbraz

This comment has been minimized.

Copy link
Contributor Author

commented Jun 2, 2018

@hugbug Why doesn't @sanderjo see the bug? He should have +crc too, shouldn't he?

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 2, 2018

@sanderjo, can you please post your build output?

Also, if you compile in debug mode (./configure --enable-debug) and activate option DebugTarget and download something your log should have debug-message:

SIMD Crc routine can be used

@switchpants

This comment has been minimized.

Copy link

commented Jun 2, 2018

For what its worth, I also need to append -fpermissive to CXXFLAGS when compiling nzbget v20.x or compilation fails.

I'm running ArchLinux ARM on a Raspberry Pi2 (ARMv7).
g++ (GCC) is version 8.1.0 but had the same issue with 7.3.x

For curiosity, I compiled a debug build of nzbget-r2181 (with -fpermissive) and I see the following in my log:

DEBUG SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
DEBUG SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)

I'm using the default ArchLinux ARM CXFLAGS and CXXFLAGS... aside from adding -fpermissive to CXXFLAGS of course

CFLAGS="-march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -O2 -pipe -fstack-protector-strong -fno-plt"
CXXFLAGS="-march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -O2 -pipe -fstack-protector-strong -fno-plt"

I can supply compile/build logs if you think it would help. Will just take a little time since the Pi2 isn't exactly a speed-demon. :)

Let me know if you'd like some output logs...

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 2, 2018

Pi2 with ARMv7 doesn't support hardware CRC acceleration. The message SIMD Crc routine isn't available for this CPU is correct.

hugbug added a commit that referenced this issue Jun 2, 2018

#550: workaround for GCC 7 bug on ARM
Fix for GCC 7 needing option “-fpermissive” to compile it’s own file
“arm_acle.h”.
@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 2, 2018

I've added -fpermissive to compiler flags for module AcleCrc.cpp. The change is currently only in branch 550-permissive.

Guys, can you please check if you can compile from branch 550-permissive without adding extra flags?

@switchpants

This comment has been minimized.

Copy link

commented Jun 2, 2018

Branch 550-permissive compiles okay here without adding any extra flags. GCC 8.1.0 on the Pi2.

Thanks!

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 2, 2018

@switchpants, thanks for testing. Merged into develop.

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 2, 2018

@sanderjo, can you please post your build output?

Is this still needed? If so:

This on Ubuntu 18.04, on ARM64. It's docker, but on ARM hardware, so no cross-compiling (which the OP seems to do ...).

root@cb856eccfbc1:/nzbget-20.0-testing# ./configure 
checking build system type... aarch64-unknown-linux-gnu
checking host system type... aarch64-unknown-linux-gnu
checking target system type... aarch64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for tar... /bin/tar
checking for make... /usr/bin/make
checking whether to test compiler features... yes
checking whether g++ supports C++14 features by default... yes
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sys/prctl.h usability... yes
checking sys/prctl.h presence... yes
checking for sys/prctl.h... yes
checking regex.h usability... yes
checking regex.h presence... yes
checking for regex.h... yes
checking endian.h usability... yes
checking endian.h presence... yes
checking for endian.h... yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking for library containing pthread_create... -lpthread
checking for library containing socket... none required
checking for library containing inet_addr... none required
checking for library containing hstrerror... none required
checking for getopt_long... yes
checking for fdatasync... yes
checking whether F_FULLFSYNC is declared... no
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking for ctime_r... yes, and it takes 2 arguments
checking for getaddrinfo... yes
checking for library containing getaddrinfo... none required
checking for type of socket length (socklen_t)... socklen_t
checking whether dir-browser snapshot workaround is needed... no
checking for cpu cores via sysconf... yes
checking whether to use libxml2... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for libxml-2.0... yes
checking libxml/tree.h usability... yes
checking libxml/tree.h presence... yes
checking for libxml/tree.h... yes
checking for library containing xmlNewNode... none required
checking whether to use curses... yes
checking for ncurses... yes
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes
checking for library containing refresh... none required
checking for library containing nodelay... none required
checking whether to include code for par-checking... yes
checking for size_t... yes
checking for _LARGEFILE_SOURCE value needed for large files... no
checking for stricmp... no
checking for getopt... yes
checking whether to use TLS/SSL... yes
checking for openssl... yes
checking openssl/ssl.h usability... yes
checking openssl/ssl.h presence... yes
checking for openssl/ssl.h... yes
checking for library containing ASN1_OBJECT_free... none required
checking for library containing SSL_CTX_new... none required
checking for library containing X509_check_host... none required
checking whether to use gzip... yes
checking for zlib... yes
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for library containing deflateBound... none required
checking whether to use SIMD-optimized routines... yes
checking whether to use an empty SIGCHLD handler... yes
checking whether to include all debugging code... no
checking whether to enable unit and integration tests... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
root@cb856eccfbc1:/nzbget-20.0-testing# 

root@cb856eccfbc1:/nzbget-20.0-testing# time make
/usr/bin/make  all-am
make[1]: Entering directory '/nzbget-20.0-testing'
depbase=`echo daemon/connect/Connection.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/connect/Connection.o -MD -MP -MF $depbase.Tpo -c -o daemon/connect/Connection.o daemon/connect/Connection.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/connect/Connection.cpp: In function 'hostent* android_read_hostent(FILE*, hostent*, char*, size_t)':
daemon/connect/Connection.cpp:1203:8: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   fread(&size, 1, sizeof(size), proxy);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
depbase=`echo daemon/connect/TlsSocket.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/connect/TlsSocket.o -MD -MP -MF $depbase.Tpo -c -o daemon/connect/TlsSocket.o daemon/connect/TlsSocket.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/connect/TlsSocket.cpp: In static member function 'static void TlsSocket::Final()':
daemon/connect/TlsSocket.cpp:210:20: warning: 'void ERR_remove_state(long unsigned int)' is deprecated [-Wdeprecated-declarations]
  ERR_remove_state(0);
                    ^
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from ./daemon/main/nzbget.h:251,
                 from daemon/connect/TlsSocket.cpp:21:
/usr/include/openssl/err.h:248:1: note: declared here
 DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid))
 ^
daemon/connect/TlsSocket.cpp: In destructor 'virtual TlsSocket::~TlsSocket()':
daemon/connect/TlsSocket.cpp:229:20: warning: 'void ERR_remove_state(long unsigned int)' is deprecated [-Wdeprecated-declarations]
  ERR_remove_state(0);
                    ^
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from ./daemon/main/nzbget.h:251,
                 from daemon/connect/TlsSocket.cpp:21:
/usr/include/openssl/err.h:248:1: note: declared here
 DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid))
 ^
daemon/connect/TlsSocket.cpp: In member function 'bool TlsSocket::ValidateCert()':
daemon/connect/TlsSocket.cpp:587:57: warning: 'unsigned char* ASN1_STRING_data(ASN1_STRING*)' is deprecated [-Wdeprecated-declarations]
      certHost = (char*)ASN1_STRING_data(common_name_asn1);
                                                         ^
In file included from /usr/include/openssl/bn.h:31:0,
                 from /usr/include/openssl/asn1.h:24,
                 from /usr/include/openssl/objects.h:916,
                 from /usr/include/openssl/evp.h:27,
                 from /usr/include/openssl/x509.h:23,
                 from /usr/include/openssl/ssl.h:50,
                 from ./daemon/main/nzbget.h:251,
                 from daemon/connect/TlsSocket.cpp:21:
/usr/include/openssl/asn1.h:553:1: note: declared here
 DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x))
 ^
depbase=`echo daemon/connect/WebDownloader.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/connect/WebDownloader.o -MD -MP -MF $depbase.Tpo -c -o daemon/connect/WebDownloader.o daemon/connect/WebDownloader.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/FeedScript.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/FeedScript.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/FeedScript.o daemon/extension/FeedScript.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/CommandScript.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/CommandScript.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/CommandScript.o daemon/extension/CommandScript.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/NzbScript.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/NzbScript.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/NzbScript.o daemon/extension/NzbScript.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/PostScript.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/PostScript.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/PostScript.o daemon/extension/PostScript.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/QueueScript.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/QueueScript.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/QueueScript.o daemon/extension/QueueScript.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/ScanScript.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/ScanScript.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/ScanScript.o daemon/extension/ScanScript.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/SchedulerScript.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/SchedulerScript.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/SchedulerScript.o daemon/extension/SchedulerScript.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/extension/ScriptConfig.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/extension/ScriptConfig.o -MD -MP -MF $depbase.Tpo -c -o daemon/extension/ScriptConfig.o daemon/extension/ScriptConfig.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/feed/FeedCoordinator.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/feed/FeedCoordinator.o -MD -MP -MF $depbase.Tpo -c -o daemon/feed/FeedCoordinator.o daemon/feed/FeedCoordinator.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/feed/FeedFile.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/feed/FeedFile.o -MD -MP -MF $depbase.Tpo -c -o daemon/feed/FeedFile.o daemon/feed/FeedFile.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/feed/FeedFilter.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/feed/FeedFilter.o -MD -MP -MF $depbase.Tpo -c -o daemon/feed/FeedFilter.o daemon/feed/FeedFilter.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/feed/FeedFilter.cpp: In member function 'bool FeedFilter::Term::MatchValue(const char*, int64)':
daemon/feed/FeedFilter.cpp:54:33: warning: format '%lld' expects argument of type 'long long int', but argument 3 has type 'int64 {aka long int}' [-Wformat=]
   intBuf.Format("%lld", intValue);
                                 ^
depbase=`echo daemon/feed/FeedInfo.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/feed/FeedInfo.o -MD -MP -MF $depbase.Tpo -c -o daemon/feed/FeedInfo.o daemon/feed/FeedInfo.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/frontend/ColoredFrontend.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/frontend/ColoredFrontend.o -MD -MP -MF $depbase.Tpo -c -o daemon/frontend/ColoredFrontend.o daemon/frontend/ColoredFrontend.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/frontend/Frontend.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/frontend/Frontend.o -MD -MP -MF $depbase.Tpo -c -o daemon/frontend/Frontend.o daemon/frontend/Frontend.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/frontend/LoggableFrontend.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/frontend/LoggableFrontend.o -MD -MP -MF $depbase.Tpo -c -o daemon/frontend/LoggableFrontend.o daemon/frontend/LoggableFrontend.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/frontend/NCursesFrontend.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/frontend/NCursesFrontend.o -MD -MP -MF $depbase.Tpo -c -o daemon/frontend/NCursesFrontend.o daemon/frontend/NCursesFrontend.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/main/CommandLineParser.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/main/CommandLineParser.o -MD -MP -MF $depbase.Tpo -c -o daemon/main/CommandLineParser.o daemon/main/CommandLineParser.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/main/CommandLineParser.cpp: In member function 'void CommandLineParser::InitFileArg(int, const char**)':
daemon/main/CommandLineParser.cpp:865:10: warning: ignoring return value of 'char* getcwd(char*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
    getcwd(m_argFilename, 1024);
    ~~~~~~^~~~~~~~~~~~~~~~~~~~~
depbase=`echo daemon/main/DiskService.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/main/DiskService.o -MD -MP -MF $depbase.Tpo -c -o daemon/main/DiskService.o daemon/main/DiskService.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/main/Maintenance.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/main/Maintenance.o -MD -MP -MF $depbase.Tpo -c -o daemon/main/Maintenance.o daemon/main/Maintenance.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/main/nzbget.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/main/nzbget.o -MD -MP -MF $depbase.Tpo -c -o daemon/main/nzbget.o daemon/main/nzbget.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/main/nzbget.cpp: In member function 'void NZBGet::Daemonize()':
daemon/main/nzbget.cpp:930:10: warning: ignoring return value of 'int fchown(int, __uid_t, __gid_t)', declared with attribute warn_unused_result [-Wunused-result]
    fchown(lfp, pw->pw_uid, pw->pw_gid);
    ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
daemon/main/nzbget.cpp:934:10: warning: ignoring return value of 'int setgid(__gid_t)', declared with attribute warn_unused_result [-Wunused-result]
    setgid(pw->pw_gid);
    ~~~~~~^~~~~~~~~~~~
daemon/main/nzbget.cpp:938:10: warning: ignoring return value of 'int setuid(__uid_t)', declared with attribute warn_unused_result [-Wunused-result]
    setuid(pw->pw_uid);
    ~~~~~~^~~~~~~~~~~~
daemon/main/nzbget.cpp:946:8: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   write(lfp, str, strlen(str));
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
depbase=`echo daemon/main/Options.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/main/Options.o -MD -MP -MF $depbase.Tpo -c -o daemon/main/Options.o daemon/main/Options.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/main/Scheduler.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/main/Scheduler.o -MD -MP -MF $depbase.Tpo -c -o daemon/main/Scheduler.o daemon/main/Scheduler.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/main/StackTrace.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/main/StackTrace.o -MD -MP -MF $depbase.Tpo -c -o daemon/main/StackTrace.o daemon/main/StackTrace.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nntp/ArticleDownloader.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nntp/ArticleDownloader.o -MD -MP -MF $depbase.Tpo -c -o daemon/nntp/ArticleDownloader.o daemon/nntp/ArticleDownloader.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nntp/ArticleWriter.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nntp/ArticleWriter.o -MD -MP -MF $depbase.Tpo -c -o daemon/nntp/ArticleWriter.o daemon/nntp/ArticleWriter.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nntp/Decoder.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nntp/Decoder.o -MD -MP -MF $depbase.Tpo -c -o daemon/nntp/Decoder.o daemon/nntp/Decoder.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nntp/NewsServer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nntp/NewsServer.o -MD -MP -MF $depbase.Tpo -c -o daemon/nntp/NewsServer.o daemon/nntp/NewsServer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nntp/NntpConnection.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nntp/NntpConnection.o -MD -MP -MF $depbase.Tpo -c -o daemon/nntp/NntpConnection.o daemon/nntp/NntpConnection.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nntp/ServerPool.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nntp/ServerPool.o -MD -MP -MF $depbase.Tpo -c -o daemon/nntp/ServerPool.o daemon/nntp/ServerPool.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nntp/StatMeter.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nntp/StatMeter.o -MD -MP -MF $depbase.Tpo -c -o daemon/nntp/StatMeter.o daemon/nntp/StatMeter.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/nntp/StatMeter.cpp: In member function 'void ServerVolume::LogDebugInfo()':
daemon/nntp/StatMeter.cpp:141:54: warning: format '%lli' expects argument of type 'long long int', but argument 4 has type '__gnu_cxx::__alloc_traits<std::allocator<long int> >::value_type {aka long int}' [-Wformat=]
   msg.AppendFmt("[%i]=%lli ", i, m_bytesPerSeconds[i]);
                                                      ^
daemon/nntp/StatMeter.cpp:148:54: warning: format '%lli' expects argument of type 'long long int', but argument 4 has type '__gnu_cxx::__alloc_traits<std::allocator<long int> >::value_type {aka long int}' [-Wformat=]
   msg.AppendFmt("[%i]=%lli ", i, m_bytesPerMinutes[i]);
                                                      ^
daemon/nntp/StatMeter.cpp:155:52: warning: format '%lli' expects argument of type 'long long int', but argument 4 has type '__gnu_cxx::__alloc_traits<std::allocator<long int> >::value_type {aka long int}' [-Wformat=]
   msg.AppendFmt("[%i]=%lli ", i, m_bytesPerHours[i]);
                                                    ^
daemon/nntp/StatMeter.cpp:162:64: warning: format '%lli' expects argument of type 'long long int', but argument 4 has type '__gnu_cxx::__alloc_traits<std::allocator<long int> >::value_type {aka long int}' [-Wformat=]
   msg.AppendFmt("[%i]=%lli ", m_firstDay + i, m_bytesPerDays[i]);
                                                                ^
daemon/nntp/StatMeter.cpp: In member function 'virtual void StatMeter::LogDebugInfo()':
daemon/nntp/StatMeter.cpp:383:55: warning: format '%lli' expects argument of type 'long long int', but argument 2 has type 'int64 {aka long int}' [-Wformat=]
  info("      SpeedTotalBytes: %lli", m_speedTotalBytes);
                                      ~~~~~~~~~~~~~~~~~^
daemon/nntp/StatMeter.cpp:385:41: warning: format '%lli' expects argument of type 'long long int', but argument 2 has type 'int64 {aka long int}' [-Wformat=]
  info("      AllBytes: %lli", m_allBytes);
                               ~~~~~~~~~~^
depbase=`echo daemon/postprocess/Cleanup.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/Cleanup.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/Cleanup.o daemon/postprocess/Cleanup.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/DupeMatcher.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/DupeMatcher.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/DupeMatcher.o daemon/postprocess/DupeMatcher.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/postprocess/DupeMatcher.cpp: In member function 'bool DupeMatcher::Prepare()':
daemon/postprocess/DupeMatcher.cpp:165:55: warning: format '%lli' expects argument of type 'long long int', but argument 5 has type 'int64 {aka long int}' [-Wformat=]
   filename, m_maxSize, sizeOK ? "" : ", size mismatch");
             ~~~~~~~~~                                 ^
daemon/postprocess/DupeMatcher.cpp: In member function 'bool DupeMatcher::MatchDupeContent(const char*)':
daemon/postprocess/DupeMatcher.cpp:177:51: warning: format '%lli' expects argument of type 'long long int', but argument 5 has type 'int64 {aka long int}' [-Wformat=]
   filename, m_maxSize, ok ? "" : ", size mismatch");
             ~~~~~~~~~                             ^
depbase=`echo daemon/postprocess/ParChecker.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/ParChecker.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/ParChecker.o daemon/postprocess/ParChecker.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/ParParser.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/ParParser.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/ParParser.o daemon/postprocess/ParParser.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/ParRenamer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/ParRenamer.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/ParRenamer.o daemon/postprocess/ParRenamer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/PrePostProcessor.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/PrePostProcessor.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/PrePostProcessor.o daemon/postprocess/PrePostProcessor.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/RarRenamer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/RarRenamer.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/RarRenamer.o daemon/postprocess/RarRenamer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/RarReader.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/RarReader.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/RarReader.o daemon/postprocess/RarReader.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/Rename.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/Rename.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/Rename.o daemon/postprocess/Rename.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/Repair.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/Repair.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/Repair.o daemon/postprocess/Repair.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/Unpack.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/Unpack.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/Unpack.o daemon/postprocess/Unpack.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/postprocess/DirectUnpack.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/postprocess/DirectUnpack.o -MD -MP -MF $depbase.Tpo -c -o daemon/postprocess/DirectUnpack.o daemon/postprocess/DirectUnpack.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/DirectRenamer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/DirectRenamer.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/DirectRenamer.o daemon/queue/DirectRenamer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/DiskState.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/DiskState.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/DiskState.o daemon/queue/DiskState.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/DownloadInfo.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/DownloadInfo.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/DownloadInfo.o daemon/queue/DownloadInfo.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/DupeCoordinator.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/DupeCoordinator.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/DupeCoordinator.o daemon/queue/DupeCoordinator.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/HistoryCoordinator.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/HistoryCoordinator.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/HistoryCoordinator.o daemon/queue/HistoryCoordinator.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/NzbFile.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/NzbFile.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/NzbFile.o daemon/queue/NzbFile.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/QueueCoordinator.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/QueueCoordinator.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/QueueCoordinator.o daemon/queue/QueueCoordinator.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/QueueEditor.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/QueueEditor.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/QueueEditor.o daemon/queue/QueueEditor.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/Scanner.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/Scanner.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/Scanner.o daemon/queue/Scanner.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/queue/UrlCoordinator.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/queue/UrlCoordinator.o -MD -MP -MF $depbase.Tpo -c -o daemon/queue/UrlCoordinator.o daemon/queue/UrlCoordinator.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/remote/BinRpc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/remote/BinRpc.o -MD -MP -MF $depbase.Tpo -c -o daemon/remote/BinRpc.o daemon/remote/BinRpc.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/remote/RemoteClient.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/remote/RemoteClient.o -MD -MP -MF $depbase.Tpo -c -o daemon/remote/RemoteClient.o daemon/remote/RemoteClient.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/remote/RemoteServer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/remote/RemoteServer.o -MD -MP -MF $depbase.Tpo -c -o daemon/remote/RemoteServer.o daemon/remote/RemoteServer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/remote/WebServer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/remote/WebServer.o -MD -MP -MF $depbase.Tpo -c -o daemon/remote/WebServer.o daemon/remote/WebServer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/remote/XmlRpc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/remote/XmlRpc.o -MD -MP -MF $depbase.Tpo -c -o daemon/remote/XmlRpc.o daemon/remote/XmlRpc.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/util/Log.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/Log.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/Log.o daemon/util/Log.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/util/NString.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/NString.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/NString.o daemon/util/NString.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/util/Observer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/Observer.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/Observer.o daemon/util/Observer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/util/Script.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/Script.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/Script.o daemon/util/Script.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/util/Script.cpp: In member function 'void ScriptController::StartProcess(int*, int*)':
daemon/util/Script.cpp:634:8: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   write(1, "\n", 1);
   ~~~~~^~~~~~~~~~~~
daemon/util/Script.cpp:638:8: warning: ignoring return value of 'int chdir(const char*)', declared with attribute warn_unused_result [-Wunused-result]
   chdir(workingDir);
   ~~~~~^~~~~~~~~~~~
daemon/util/Script.cpp:645:9: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
    write(1, "[WARNING] Fixing permissions for", 32);
    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
daemon/util/Script.cpp:646:9: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
    write(1, script, strlen(script));
    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
daemon/util/Script.cpp:647:9: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
    write(1, "\n", 1);
    ~~~~~^~~~~~~~~~~~
daemon/util/Script.cpp:655:8: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   write(1, "[ERROR] Could not start ", 24);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
daemon/util/Script.cpp:656:8: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   write(1, script, strlen(script));
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
daemon/util/Script.cpp:657:8: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   write(1, ": ", 2);
   ~~~~~^~~~~~~~~~~~
daemon/util/Script.cpp:659:8: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   write(1, errtext, strlen(errtext));
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
daemon/util/Script.cpp:660:8: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   write(1, "\n", 1);
   ~~~~~^~~~~~~~~~~~
depbase=`echo daemon/util/Thread.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/Thread.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/Thread.o daemon/util/Thread.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/util/Service.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/Service.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/Service.o daemon/util/Service.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/util/FileSystem.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/FileSystem.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/FileSystem.o daemon/util/FileSystem.cpp &&\
mv -f $depbase.Tpo $depbase.Po
daemon/util/FileSystem.cpp: In static member function 'static CString FileSystem::GetLastErrorMessage()':
daemon/util/FileSystem.cpp:32:12: warning: ignoring return value of 'char* strerror_r(int, char*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
  strerror_r(errno, msg, msg.Capacity());
  ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
daemon/util/FileSystem.cpp: In static member function 'static CString FileSystem::GetCurrentDirectory()':
daemon/util/FileSystem.cpp:193:8: warning: ignoring return value of 'char* getcwd(char*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
  getcwd(str, 1024);
  ~~~~~~^~~~~~~~~~~
daemon/util/FileSystem.cpp: In static member function 'static bool FileSystem::AllocateFile(const char*, int64, bool, CString&)':
daemon/util/FileSystem.cpp:294:10: warning: ignoring return value of 'int truncate(const char*, __off_t)', declared with attribute warn_unused_result [-Wunused-result]
  truncate(filename, size);
  ~~~~~~~~^~~~~~~~~~~~~~~~
daemon/util/FileSystem.cpp:300:11: warning: ignoring return value of 'int truncate(const char*, __off_t)', declared with attribute warn_unused_result [-Wunused-result]
   truncate(filename, 0);
   ~~~~~~~~^~~~~~~~~~~~~
daemon/util/FileSystem.cpp: In static member function 'static CString FileSystem::ExpandFileName(const char*)':
daemon/util/FileSystem.cpp:763:9: warning: ignoring return value of 'char* getcwd(char*, size_t)', declared with attribute warn_unused_result [-Wunused-result]
   getcwd(curDir, sizeof(curDir) - 1); // 1 char reserved for adding backslash
   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
depbase=`echo daemon/util/Util.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/util/Util.o -MD -MP -MF $depbase.Tpo -c -o daemon/util/Util.o daemon/util/Util.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nserv/NServMain.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nserv/NServMain.o -MD -MP -MF $depbase.Tpo -c -o daemon/nserv/NServMain.o daemon/nserv/NServMain.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nserv/NServFrontend.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nserv/NServFrontend.o -MD -MP -MF $depbase.Tpo -c -o daemon/nserv/NServFrontend.o daemon/nserv/NServFrontend.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nserv/NntpServer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nserv/NntpServer.o -MD -MP -MF $depbase.Tpo -c -o daemon/nserv/NntpServer.o daemon/nserv/NntpServer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nserv/NzbGenerator.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nserv/NzbGenerator.o -MD -MP -MF $depbase.Tpo -c -o daemon/nserv/NzbGenerator.o daemon/nserv/NzbGenerator.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo daemon/nserv/YEncoder.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT daemon/nserv/YEncoder.o -MD -MP -MF $depbase.Tpo -c -o daemon/nserv/YEncoder.o daemon/nserv/YEncoder.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo code_revision.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT code_revision.o -MD -MP -MF $depbase.Tpo -c -o code_revision.o code_revision.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/commandline.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/commandline.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/commandline.o lib/par2/commandline.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/crc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/crc.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/crc.o lib/par2/crc.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/creatorpacket.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/creatorpacket.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/creatorpacket.o lib/par2/creatorpacket.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/criticalpacket.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/criticalpacket.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/criticalpacket.o lib/par2/criticalpacket.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/datablock.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/datablock.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/datablock.o lib/par2/datablock.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/descriptionpacket.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/descriptionpacket.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/descriptionpacket.o lib/par2/descriptionpacket.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/diskfile.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/diskfile.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/diskfile.o lib/par2/diskfile.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/filechecksummer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/filechecksummer.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/filechecksummer.o lib/par2/filechecksummer.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/galois.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/galois.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/galois.o lib/par2/galois.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/mainpacket.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/mainpacket.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/mainpacket.o lib/par2/mainpacket.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/md5.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/md5.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/md5.o lib/par2/md5.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/par2fileformat.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/par2fileformat.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/par2fileformat.o lib/par2/par2fileformat.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/par2repairer.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/par2repairer.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/par2repairer.o lib/par2/par2repairer.cpp &&\
mv -f $depbase.Tpo $depbase.Po

depbase=`echo lib/par2/par2repairersourcefile.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/par2repairersourcefile.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/par2repairersourcefile.o lib/par2/par2repairersourcefile.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/parheaders.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/parheaders.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/parheaders.o lib/par2/parheaders.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/recoverypacket.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/recoverypacket.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/recoverypacket.o lib/par2/recoverypacket.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/reedsolomon.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/reedsolomon.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/reedsolomon.o lib/par2/reedsolomon.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/verificationhashtable.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/verificationhashtable.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/verificationhashtable.o lib/par2/verificationhashtable.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/par2/verificationpacket.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/par2/verificationpacket.o -MD -MP -MF $depbase.Tpo -c -o lib/par2/verificationpacket.o lib/par2/verificationpacket.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/SimdInit.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/yencode/SimdInit.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/SimdInit.o lib/yencode/SimdInit.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/SimdDecoder.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/yencode/SimdDecoder.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/SimdDecoder.o lib/yencode/SimdDecoder.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/ScalarDecoder.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/yencode/ScalarDecoder.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/ScalarDecoder.o lib/yencode/ScalarDecoder.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/Sse2Decoder.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2  -MT lib/yencode/Sse2Decoder.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/Sse2Decoder.o lib/yencode/Sse2Decoder.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/Ssse3Decoder.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2  -MT lib/yencode/Ssse3Decoder.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/Ssse3Decoder.o lib/yencode/Ssse3Decoder.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/PclmulCrc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2  -MT lib/yencode/PclmulCrc.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/PclmulCrc.o lib/yencode/PclmulCrc.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/NeonDecoder.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2  -MT lib/yencode/NeonDecoder.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/NeonDecoder.o lib/yencode/NeonDecoder.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/AcleCrc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -march=armv8-a+crc -MT lib/yencode/AcleCrc.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/AcleCrc.o lib/yencode/AcleCrc.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo lib/yencode/SliceCrc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I.  -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode  -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE    -g -O2 -MT lib/yencode/SliceCrc.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/SliceCrc.o lib/yencode/SliceCrc.cpp &&\
mv -f $depbase.Tpo $depbase.Po
g++  -g -O2   -o nzbget daemon/connect/Connection.o daemon/connect/TlsSocket.o daemon/connect/WebDownloader.o daemon/extension/FeedScript.o daemon/extension/CommandScript.o daemon/extension/NzbScript.o daemon/extension/PostScript.o daemon/extension/QueueScript.o daemon/extension/ScanScript.o daemon/extension/SchedulerScript.o daemon/extension/ScriptConfig.o daemon/feed/FeedCoordinator.o daemon/feed/FeedFile.o daemon/feed/FeedFilter.o daemon/feed/FeedInfo.o daemon/frontend/ColoredFrontend.o daemon/frontend/Frontend.o daemon/frontend/LoggableFrontend.o daemon/frontend/NCursesFrontend.o daemon/main/CommandLineParser.o daemon/main/DiskService.o daemon/main/Maintenance.o daemon/main/nzbget.o daemon/main/Options.o daemon/main/Scheduler.o daemon/main/StackTrace.o daemon/nntp/ArticleDownloader.o daemon/nntp/ArticleWriter.o daemon/nntp/Decoder.o daemon/nntp/NewsServer.o daemon/nntp/NntpConnection.o daemon/nntp/ServerPool.o daemon/nntp/StatMeter.o daemon/postprocess/Cleanup.o daemon/postprocess/DupeMatcher.o daemon/postprocess/ParChecker.o daemon/postprocess/ParParser.o daemon/postprocess/ParRenamer.o daemon/postprocess/PrePostProcessor.o daemon/postprocess/RarRenamer.o daemon/postprocess/RarReader.o daemon/postprocess/Rename.o daemon/postprocess/Repair.o daemon/postprocess/Unpack.o daemon/postprocess/DirectUnpack.o daemon/queue/DirectRenamer.o daemon/queue/DiskState.o daemon/queue/DownloadInfo.o daemon/queue/DupeCoordinator.o daemon/queue/HistoryCoordinator.o daemon/queue/NzbFile.o daemon/queue/QueueCoordinator.o daemon/queue/QueueEditor.o daemon/queue/Scanner.o daemon/queue/UrlCoordinator.o daemon/remote/BinRpc.o daemon/remote/RemoteClient.o daemon/remote/RemoteServer.o daemon/remote/WebServer.o daemon/remote/XmlRpc.o daemon/util/Log.o daemon/util/NString.o daemon/util/Observer.o daemon/util/Script.o daemon/util/Thread.o daemon/util/Service.o daemon/util/FileSystem.o daemon/util/Util.o daemon/nserv/NServMain.o daemon/nserv/NServFrontend.o daemon/nserv/NntpServer.o daemon/nserv/NzbGenerator.o daemon/nserv/YEncoder.o code_revision.o lib/par2/commandline.o lib/par2/crc.o lib/par2/creatorpacket.o lib/par2/criticalpacket.o lib/par2/datablock.o lib/par2/descriptionpacket.o lib/par2/diskfile.o lib/par2/filechecksummer.o lib/par2/galois.o lib/par2/mainpacket.o lib/par2/md5.o lib/par2/par2fileformat.o lib/par2/par2repairer.o lib/par2/par2repairersourcefile.o lib/par2/parheaders.o lib/par2/recoverypacket.o lib/par2/reedsolomon.o lib/par2/verificationhashtable.o lib/par2/verificationpacket.o lib/yencode/SimdInit.o lib/yencode/SimdDecoder.o lib/yencode/ScalarDecoder.o lib/yencode/Sse2Decoder.o lib/yencode/Ssse3Decoder.o lib/yencode/PclmulCrc.o lib/yencode/NeonDecoder.o lib/yencode/AcleCrc.o lib/yencode/SliceCrc.o    -lpthread  -lxml2 -lncurses -ltinfo -lssl -lcrypto -lz
make[1]: Leaving directory '/nzbget-20.0-testing'

real	26m58.218s
user	24m44.002s
sys	1m32.005s
root@cb856eccfbc1:/nzbget-20.0-testing# 
root@cb856eccfbc1:/nzbget-20.0-testing# 

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 2, 2018

Also, if you compile in debug mode (./configure --enable-debug) and activate option DebugTarget and download something your log should have debug-message:

SIMD Crc routine can be used

OK, on bare metal again (so that I can access the webinterface easier):

sander@nanopineo2:~/git/nzbget$ ./configure --enable-debug
checking build system type... aarch64-unknown-linux-gnu
checking host system type... aarch64-unknown-linux-gnu
checking target system type... aarch64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for tar... /bin/tar
checking for make... /usr/bin/make
checking whether to test compiler features... yes
checking whether g++ supports C++14 features by default... no
checking whether g++ supports C++14 features with -std=c++14... yes
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sys/prctl.h usability... yes
checking sys/prctl.h presence... yes
checking for sys/prctl.h... yes
checking regex.h usability... yes
checking regex.h presence... yes
checking for regex.h... yes
checking endian.h usability... yes
checking endian.h presence... yes
checking for endian.h... yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking for library containing pthread_create... -lpthread
checking for library containing socket... none required
checking for library containing inet_addr... none required
checking for library containing hstrerror... none required
checking for getopt_long... yes
checking for fdatasync... yes
checking whether F_FULLFSYNC is declared... no
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking for ctime_r... yes, and it takes 2 arguments
checking for getaddrinfo... yes
checking for library containing getaddrinfo... none required
checking for type of socket length (socklen_t)... socklen_t
checking whether dir-browser snapshot workaround is needed... no
checking for cpu cores via sysconf... yes
checking whether to use libxml2... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for libxml-2.0... yes
checking libxml/tree.h usability... yes
checking libxml/tree.h presence... yes
checking for libxml/tree.h... yes
checking for library containing xmlNewNode... none required
checking whether to use curses... yes
checking for ncurses... yes
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes
checking for library containing refresh... none required
checking for library containing nodelay... none required
checking whether to include code for par-checking... yes
checking for size_t... yes
checking for _LARGEFILE_SOURCE value needed for large files... no
checking for stricmp... no
checking for getopt... yes
checking whether to use TLS/SSL... yes
checking for openssl... yes
checking openssl/ssl.h usability... yes
checking openssl/ssl.h presence... yes
checking for openssl/ssl.h... yes
checking for library containing ASN1_OBJECT_free... none required
checking for library containing SSL_CTX_new... none required
checking for library containing X509_check_host... none required
checking whether to use gzip... yes
checking for zlib... yes
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for library containing deflateBound... none required
checking whether to use SIMD-optimized routines... yes
checking whether to use an empty SIGCHLD handler... yes
checking whether to include all debugging code... yes
checking for macro returning current function name... __FUNCTION__
checking for variadic macros... yes
checking for backtrace... yes
checking for rdynamic linker flag... yes
checking whether to enable unit and integration tests... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
sander@nanopineo2:~/git/nzbget$ 


< Build view will follow >

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 2, 2018

@sanderjo, thank you.

From the docker log:

g++ -DHAVE_CONFIG_H -I. -I./daemon/connect -I./daemon/extension -I./daemon/feed -I./daemon/frontend -I./daemon/main -I./daemon/nntp -I./daemon/postprocess -I./daemon/queue -I./daemon/remote -I./daemon/util -I./daemon/nserv -I./lib/par2 -I./lib/yencode -I/usr/include/libxml2 -D_GNU_SOURCE -D_DEFAULT_SOURCE -g -O2 -march=armv8-a+crc -MT lib/yencode/AcleCrc.o -MD -MP -MF $depbase.Tpo -c -o lib/yencode/AcleCrc.o lib/yencode/AcleCrc.cpp &&\

-march=armv8-a+crc is there and compilation doesn't fail.

I wonder if arm_acle.h is part of GCC or part of toolchain? I think the latter is more likely. In that case it's not a bug of GCC but a result of GCC 7 strengthening validations whereas the toolchain builder hasn't adjusted the files yet.

Ubuntu (or Debian) developers seems to have fixed the issue. Have they patched arm_acle.h?

@sanderjo, @switchpants: can you please upload yours arm_acle.h (pastebin.com or gists) for comparison?

Anyway, since at least two systems have the problem I think it was appropriate to add a workaround to nzbget's configure to avoid the issue for other users. Maybe we can remove the workaround in the future when toolchains are updated (or GCC is fixed if that's GCC issue).

@switchpants

This comment has been minimized.

Copy link

commented Jun 2, 2018

GCC 8.1.0 /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/8.1.0/include/arm_acle.h

https://pastebin.com/acqWrLz7

@sbraz

This comment has been minimized.

Copy link
Contributor Author

commented Jun 3, 2018

@hugbug I think it is a GCC bug indeed, one of the arm.com guys who wrote some of the GCC ARM code acknowledged it in the bug that I linked.

@switchpants you seem to have the same file as the one in GCC's git repository. I'm not surprised that it fails to build for you.

@sanderjo can you try compiling the example code from the GCC bug?

#include <arm_acle.h>

int main() {return 0; }

Maybe your system just doesn't define __ARM_FEATURE_CRC32?

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 3, 2018

@sbraz

No problems compiling that code on Ubuntu 18.04 and Ubuntu 16.04 on ARM64.

root@8dfa3a07b200:/# cat testing.c 
#include <arm_acle.h>

int main() {return 0; }

root@8dfa3a07b200:/# gcc testing.c 
root@8dfa3a07b200:/# 

Maybe your system just doesn't define __ARM_FEATURE_CRC32?

Is the following correct code to test that:

#include <arm_acle.h>
#include <stdio.h>

int main() {
	printf("Hello!\n");
	#ifdef  __ARM_FEATURE_CRC32
		printf("yes,  __ARM_FEATURE_CRC32 is there\n");
	#else
		printf("No, __ARM_FEATURE_CRC32 not there\n");
	#endif
	return 0; 
}

If so: indeed not defined:

root@8dfa3a07b200:/# ./testing 
Hello!
No, __ARM_FEATURE_CRC32 not there
root@8dfa3a07b200:/# 
@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 3, 2018

@hugbug

can you please upload yours arm_acle.h (pastebin.com or gists) for comparison?

From Ubuntu 18.04 on ARm64, with g++ 7.3.0.

/usr/lib/gcc/aarch64-linux-gnu/7/include/arm_acle.h

https://pastebin.com/nYxTMVcS

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 3, 2018

Try:
gcc -march=armv8-a+crc testing.cpp

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 3, 2018

With

#include <arm_acle.h>
#include <stdio.h>

int main() {
	printf("Hello!\n");
	#ifdef  __ARM_FEATURE_CRC32
		printf("yes,  __ARM_FEATURE_CRC32 is there\n");
	#else
		printf("No, __ARM_FEATURE_CRC32 not there\n");
	#endif
	return 0; 
}

I get


root@0014639246a1:/# gcc testing.cpp 
root@0014639246a1:/# ./a.out 
Hello!
No, __ARM_FEATURE_CRC32 not there
root@0014639246a1:/# 

resp

root@0014639246a1:/# gcc -march=armv8-a+crc testing.cpp
root@0014639246a1:/# ./a.out 
Hello!
yes,  __ARM_FEATURE_CRC32 is there
root@0014639246a1:/# 

@sbraz

This comment has been minimized.

Copy link
Contributor Author

commented Jun 3, 2018

Looks like the file for ARM64 is not broken like the ARM one:
https://github.com/gcc-mirror/gcc/blob/8e8f6434760cfe2a1c6c9644181189fdb4d987bb/gcc/config/aarch64/arm_acle.h
vs
https://github.com/gcc-mirror/gcc/blob/8e8f6434760cfe2a1c6c9644181189fdb4d987bb/gcc/config/arm/arm_acle.h

That explains why @sanderjo isn't affected: he can include the arm_acle.h file without any special workaround.

@hugbug I'm not really familiar with ARM, why do you set march=armv8-a even for ARM? The Gentoo bug reporter was using armv7-a. Do both work for an ARM CPU?

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 3, 2018

I provide prebuilt binaries packed into installer which can be installed on most Linux systems. Depending on CPU installer unpacks binaries for that CPU family. There are many ARM variants with different features (core version, FPU, SIMD, etc.). Since I don't want to build and include binaries for 100 ARM variants I do provide currently only two: one for ARMv5 architecture (which also works on ARMv6, ARMv7 and ARMv8) and another one for ARMv7 (which also works on ARMv8).

Some features of nzbget require certain CPU features. For example many ARMv8 CPUs (but not all!) have special instruction for CRC computation. Nzbget has special version of CRC routine which uses that instruction. In order to be able to use that instruction the source module must be compiled with compiler flags enabling that instruction: -march=armv8-a+crc.

We cannot however compile the whole program with that flags because compiler will use instructions for newer CPUs everywhere and the program will not work on older CPUs.

To produce nzbget binary which works on both ARMv7 and ARMv8 and can use CRC instructions if they are available we put CRC routine into a separate module and compile only that module with -march=armv8-a+crc. All other modules are compiled for ARMv7. There is code executed on program startup which detects features of current CPU and switches CRC routine either to classic or to SIMD version.

This was one example for CRC but there are other routines optimized for certain CPU features. All such routines are put into separate modules which are compiled with certain compiler flags and there is central code which at runtime dispatches which version of routine to use. This is not ARM specific, the same technique applies to x86 for routines specific for SSE2, SSSE3, PCLMUL.

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 4, 2018

@hugbug

Also, if you compile in debug mode (./configure --enable-debug) and activate option DebugTarget and download something your log should have debug-message:

SIMD Crc routine can be used

Result on Ubuntu 16.04 with gcc 5.x:

sander@nanopineo2:~/nzbget$ cat downloads/nzbget.log | grep -i simd | head -10
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 06:47:56 2018        18091   281472862777824 DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)

So SIMD Crc routine isn't available for this CPU that's not good, I think?

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 4, 2018

Not good indeed. This is for self compiled nzbget, right?
Is it the same for nzbget binary from installer (debug)?
Is crc32 listed in cat /proc/cpuinfo?

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 4, 2018

Not good indeed. This is for self compiled nzbget, right?

Yes, self compiled, with debug, then the binary copied into my ~/nzbget als nzbget-debug, and running it from there

-rwxr-xr-x  1 sander sander  3660580 Apr 15 16:50 nzbget*
-rw-r--r--  1 sander sander    67330 Jun  4 06:47 nzbget.conf
-rwxrwxr-x  1 sander sander 24398920 Jun  4 06:44 nzbget-debug*

Is it the same for nzbget binary from installer (debug)?

Which one do you mean? The nzbget binary from installer doesn't do debug, does it?

Is crc32 listed in cat /proc/cpuinfo?

Yes:

$ cat /proc/cpuinfo | grep -i crc32
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 4, 2018

The nzbget binary from installer doesn't do debug, does it?

There is one which does - the one with debug in installer name in the releases section on GitHub:

image

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 4, 2018

OK. So that's ARM32 binary on my ARM64 cpu?

I would say same result (please ignore time offset, probably a timezone thing)

Mon Jun  4 07:39:15 2018        19934   4136628944      DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 07:39:15 2018        19934   4136628944      DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)
Mon Jun  4 07:39:15 2018        19934   4136628944      DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 07:39:15 2018        19934   4136628944      DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)
Mon Jun  4 07:39:15 2018        19934   4136628944      DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 4, 2018

So that's ARM32 binary on my ARM64 cpu?

Installer should have chosen architecture automatically - armhf.


Weird, weird. I'm sure it did work in the past, when it was initially implemented.
Can you please for a test try r2147?

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 4, 2018

r2147 gives the same:

Mon Jun  4 08:01:33 2018        20772   4140823248      DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 08:01:33 2018        20772   4140823248      DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)
Mon Jun  4 08:01:33 2018        20772   4140823248      DEBUG   SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 08:01:33 2018        20772   4140823248      DEBUG   SIMD Crc routine isn't available for this CPU (Decoder.cpp:30:Decoder)

hugbug added a commit that referenced this issue Jun 4, 2018

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 4, 2018

SIMD Crc routine isn't available for this CPU

I've found the issue. A flag (variable) indicating that SIMD routine was activated wasn't set. The debug message was always printing "isn't available" even if SIMD CRC was used on ARM; the status for x86 was printed correctly.

Fixed in develop. Please test.

@sanderjo

This comment has been minimized.

Copy link
Contributor

commented Jun 4, 2018

After a fresh git pull and a make, I indeed get the two positive SIMD lines on my ARM64:

Mon Jun  4 19:29:12 2018	18705	281473511293408	DEBUG	SIMD yEnc decoder can be used (Decoder.cpp:29:Decoder)
Mon Jun  4 19:29:12 2018	18705	281473511293408	DEBUG	SIMD Crc routine can be used (Decoder.cpp:30:Decoder)

Cool. Thanks.

@sbraz

This comment has been minimized.

Copy link
Contributor Author

commented Jun 4, 2018

FYI I contacted one of the ARM developers who said he will write a patch: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81497#c3
@hugbug so that's something to keep in mind: when a new GCC is released, we will hopefully be able to drop the permissive flag.

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 5, 2018

Great!

If they backport the fix to 7.x then we can indeed drop the flag. Otherwise we may need to keep it as long as GCC 7 is in use which means like the next ten years 😃.

@sbraz

This comment has been minimized.

Copy link
Contributor Author

commented Jun 5, 2018

Will backport to the branches after a few days.

Maybe this means the 7.x branch :)

Linking to the commit because it was not easy to find in the GCC bug report: gcc-mirror/gcc@1a259ac

@hugbug

This comment has been minimized.

Copy link
Member

commented Jun 6, 2018

Closing this as resolved.
Thanks to all for the help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.