add .inc file to .am
[oweals/gnunet.git] / contrib / scripts / gnunet-bugreport
1 #!/bin/sh
2
3 progname=${0##*/}
4
5 statusmsg()
6 {
7     echo "    $@"
8 }
9
10 infomsg()
11 {
12     statusmsg "INFO:    $@"
13 }
14
15 warningmsg()
16 {
17     statusmsg "WARNING: $@"
18 }
19
20 errormsg()
21 {
22     statusmsg "ERROR:   $@"
23 }
24
25 linemsg()
26 {
27     statusmsg "========================================="
28 }
29
30 # It is okay to assume which(1) here because we provide
31 # more than 1 fallback.
32 TEST=`type type|grep not`
33 if test -n "$TEST"; then
34   WHICH=which
35 else
36   WHICH=type
37 fi
38
39 os_check()
40 {
41     OS=`uname -s 2>/dev/null`
42     infomsg "OS             : $OS"
43     REL=`uname -r 2>/dev/null`
44     infomsg "OS RELEASE     : $REL"
45     HW=`uname -m 2>/dev/null`
46     infomsg "HARDWARE       : $HW"
47 }
48
49 # We shouldn't use awk to test for awk... but if
50 # awk isn't there it can't be found.
51 awk_check()
52 {
53     if test -n "`awk 2>&1 | tail -1 | awk '{print $1}'`"; then
54         infomsg    "awk            : Found"
55     else
56         warningmsg "awk            : Not found!"
57     fi
58 }
59
60 gcc_check()
61 {
62     TEST=`$WHICH gcc | grep -v "not found" 2>/dev/null`
63     if test -n "$TEST"; then
64         VERS=`gcc --version 2>/dev/null | head -n 1`
65         infomsg "gcc            : $VERS"
66     elif test -n "`gcc 2>&1 | tail -1 | awk '{print $1}'`"; then
67         VERS=`gcc --version 2>/dev/null | head -n 1`
68         infomsg "gcc             : $VERS"
69     else
70         warningmsg "gcc            : Not Found";
71     fi
72 }
73
74 cc_check()
75 {
76     TEST=`$WHICH cc | grep -v "not found" 2>/dev/null`
77     if test -n "$TEST"; then
78         VERS=`cc --version 2>/dev/null | head -n 1`
79         infomsg "cc             : $VERS"
80     else
81         warningmsg "cc             : Not Found";
82     fi
83 }
84
85 cplusplus_check()
86 {
87     TEST=`$WHICH c++ | grep -v "not found" 2>/dev/null`
88     if test -n "$TEST"; then
89         VERS=`c++ --version 2>/dev/null | head -n 1`
90         infomsg "c++            : $VERS"
91     else
92         warningmsg "c++            : Not Found";
93     fi
94 }
95
96 clang_check()
97 {
98     TEST=`$WHICH clang | grep -v "not found" 2>/dev/null`
99     if test -n "$TEST"; then
100         VERS=`clang --version 2>/dev/null | head -n 1`
101         infomsg "clang          : $VERS"
102     elif test -n "`clang 2>&1 | tail -1 | awk '{print $1}'`"; then
103         VERS=`clang --version 2>/dev/null | head -n 1`
104         infomsg "clang          : $VERS"
105     else
106         warningmsg "clang          : Not Found";
107     fi
108 }
109
110 clangplusplus_check()
111 {
112     TEST=`$WHICH clang++ | grep -v "not found" 2>/dev/null`
113     if test -n "$TEST"; then
114         VERS=`clang++ --version 2>/dev/null | head -n 1`
115         infomsg "clang++        : $VERS"
116     elif test -n "`clang++ 2>&1 | tail -1 | awk '{print $1}'`"; then
117         VERS=`clang++ --version 2>/dev/null | head -n 1`
118         infomsg "clang++        : $VERS"
119     else
120         warningmsg "clang++        : Not Found";
121     fi
122 }
123
124 gmake_check()
125 {
126     TEST=`$WHICH gmake | grep -v "not found"  2>/dev/null`
127     if test -n "$TEST" ; then
128         VER=$(gmake --version 2>/dev/null | awk '/GNU Make/ {print $3}')
129         infomsg "gmake          : $VER"
130     else
131         TEST=`make --version 2>/dev/null`
132         if test -n "$TEST"; then
133             VER=$(make --version 2>/dev/null | awk '/GNU Make/ {print $3}')
134             infomsg "gmake        : $VER"
135         else
136             warningmsg "gmake         : Not Found"
137         fi
138     fi
139 }
140
141 # Applies for NetBSD make and possibly every make.
142 make_check()
143 {
144     if test -n "`make 2>/dev/null`"; then
145         infomsg    "make           : Found"
146     else
147         warningmsg "make           : Not Found"
148     fi
149 }
150
151 autoconf_check()
152 {
153     TEST=`$WHICH autoconf | grep -v "not found" 2>/dev/null`
154     if test -n "$TEST"; then
155         autoconf --version |\
156             head -n 1 |\
157             awk '{\
158         if (length($4) == 0) {\
159                 print "    INFO:    autoconf       : "$3\
160         } else {\
161                 print "    INFO:    autoconf       : "$4\
162         }}'
163     else
164         warningmsg "autoconf       : Not Found"
165     fi
166 }
167
168 automake_check()
169 {
170     TEST=`$WHICH automake | grep -v "not found" 2>/dev/null`
171     if test -n "$TEST"; then
172         VER=`automake --version 2>/dev/null | head -n 1 | awk '{print $4}'`
173         infomsg "automake       : $VER"
174     else
175         warningmsg "automake       : Not Found"
176     fi
177 }
178
179 # TODO: More libtool variants.
180 libtool_check()
181 {
182     TEST=`$WHICH libtoolize | grep -v "not found" 2>/dev/null`
183     if test -n "$TEST"; then
184         VER=`libtoolize --version 2>/dev/null | head -n 1 | awk '{print $4}'`
185         infomsg "libtool        : $VER"
186     else
187         warningmsg "libtool        : Not Found"
188     fi
189 }
190
191 libextractor_check()
192 {
193     TEST=`$WHICH extract | grep -v "not found" 2>/dev/null`
194     if test -n "$TEST"; then
195         VER=`extract -v 2>/dev/null | head -n 1 | awk '{print $2}'`
196         infomsg "libextractor   : $VER"
197     else
198         warningmsg "libextractor   : Not Found"
199     fi
200 }
201
202 gnunet08_check()
203 {
204     if test -x gnunetd; then
205         VER=`gnunetd -v | sed -e "s/v//" 2>/dev/null`
206         warningmsg "GNUnet 0.8     : $VER (may conflict!)"
207     else
208         infomsg "GNUnet 0.8     : Not Found (good)"
209     fi
210 }
211
212 gnunet09x_check()
213 {
214     TEST=`$WHICH gnunet-arm | grep -v "not found" 2>/dev/null`
215     if test -n "$TEST"; then
216         VER=`gnunet-arm -v | sed -e "s/v//" 2>/dev/null | awk '{print $2}'`
217         VER9=`echo $VER | grep ^0\.9\.`
218         if test -n "$VER9"; then
219             warningmsg "GNUnet 0.9     : $VER"
220         else
221             infomsg "GNUnet 0.9     : Not Found (good)"
222         fi
223     else
224         infomsg "GNUnet 0.9     : Not Found (good)"
225     fi
226 }
227
228 gnunet010x_check()
229 {
230     TEST=`$WHICH gnunet-arm | grep -v "not found" 2>/dev/null`
231     if test -n "$TEST"; then
232         VER=`gnunet-arm -v | sed -e "s/v//" 2>/dev/null | awk '{print $2}'`
233         VER10=`echo $VER | grep ^0\.10\.`
234         if test -n "$VER10"; then
235             warningmsg "GNUnet 0.10    : $VER"
236         else
237             infomsg "GNUnet 0.10    : Not Found (good)"
238         fi
239     else
240         infomsg "GNUnet 0.10    : Not Found (good)"
241     fi
242 }
243
244 gnunet011x_check()
245 {
246     TEST=`$WHICH gnunet-arm | grep -v "not found" 2>/dev/null`
247     if test -n "$TEST"; then
248         VER=`gnunet-arm -v | sed -e "s/v//" 2>/dev/null | awk '{print $2}'`
249         infomsg "GNUnet 0.11    : $VER"
250     else
251         warningmsg "GNUnet 0.11.x     : Not Found"
252     fi
253 }
254
255 gitcommit_check()
256 {
257     TEST=$(git | grep -v "not found" 2> /dev/null)
258     if test -n "$TEST"; then
259         VER=$(git rev-parse HEAD)
260         infomsg "git commit     : $VER"
261     else
262         warningmsg "git commit      : Not a git checkout"
263     fi
264 }
265
266 gcrypt_check()
267 {
268     TEST=`$WHICH libgcrypt-config | grep -v "not found" 2> /dev/null`
269     if test -n "$TEST"; then
270         VER=`libgcrypt-config --version 2> /dev/null`
271         infomsg "libgcrypt      : $VER"
272     else
273         warningmsg "libgcrypt      : Not Found"
274     fi
275 }
276
277 mysql_check()
278 {
279     TEST=`$WHICH mysql_config | grep -v "not found" 2> /dev/null`
280     if test -n "$TEST"; then
281         VER=`mysql_config --version 2> /dev/null`
282         infomsg "mysql          : $VER"
283     else
284         infomsg "mysql          : Not Found"
285     fi
286 }
287
288 pkgconf_check()
289 {
290     TEST=`$WHICH pkgconf | grep -v "not found" 2> /dev/null`
291     if test -n "$TEST"; then
292         pkgconf --version 2> /dev/null | awk '{print "    INFO:    pkgconf        : "$1}'
293     else
294         infomsg "pkgconf        : Not Found"
295     fi
296 }
297
298 pkgconfig_check()
299 {
300     TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
301     if test -n "$TEST"; then
302         VER=`pkg-config --version 2> /dev/null | awk '{print $1}'`
303         infomsg "pkg-config     : $VER"
304     else
305         infomsg "pkg-config     : Not Found"
306     fi
307 }
308
309 glib2_check()
310 {
311     TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
312     if test -n "$TEST"; then
313         VER=`pkg-config --modversion glib-2.0 2> /dev/null | awk '{print $1}'`
314         infomsg "glib2          : $VER"
315     else
316         infomsg "glib2          : Not Found"
317     fi
318 }
319
320 gtk2_check()
321 {
322     TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
323     if test -n "$TEST"; then
324         VER=`pkg-config --modversion gtk+-2.0 2> /dev/null | awk '{print $1}'`
325         if test -n "$VER"; then
326             infomsg "gtk2+          : $VER"
327         else
328             infomsg "gtk2+          : Not found"
329         fi
330     else
331         infomsg "gtk2+          : Not Found"
332     fi
333 }
334
335 gtk3_check()
336 {
337     TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
338     if test -n "$TEST"; then
339         VER=`pkg-config --modversion gtk+-3.0 2> /dev/null | awk '{print $1}'`
340         if test -n "$VER"; then
341             infomsg "gtk3+          : $VER"
342         else
343             infomsg "gtk3+          : Not found"
344         fi
345     else
346         infomsg "gtk3+          : Not Found"
347     fi
348 }
349
350 gtk4_check()
351 {
352     TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
353     if test -n "$TEST"; then
354         VER=`pkg-config --modversion gtk+-4.0 2> /dev/null | awk '{print $1}'`
355         if test -n "$VER"; then
356             infomsg "gtk4+          : $VER"
357         else
358             infomsg "gtk4+          : Not found"
359         fi
360     else
361         infomsg "gtk4+          : Not Found"
362     fi
363 }
364
365 gmp_check()
366 {
367     TEST=`$WHICH dpkg | grep -v "not found" 2> /dev/null`
368     if test -n "$TEST"; then
369         LINES=`dpkg -s libgmp-dev | grep Version | wc -l 2> /dev/null`
370         if test "$LINES" = "1"
371         then
372             VERSION=`dpkg -s libgmp-dev | grep Version | awk '{print $2}'`
373             infomsg "GMP            : libgmp-dev-$VERSION.deb"
374         else
375             errormsg "GMP            : dpkg: libgmp-dev not installed"
376         fi
377     else
378         TEST=`$WHICH rpm | grep -v "not found" 2> /dev/null`
379         if test -n "$TEST"; then
380             rpm -q gmp | sed -e "s/gmp-//" 2> /dev/null | \
381                 infomsg "GMP            : $1.rpm"
382         else
383             infomsg "GMP            : Test not available"
384         fi
385         TEST=$($WHICH pkg_info | grep -v "not found" 2> /dev/null)
386         if test -n "$TEST"; then
387             VER=$(pkg_info -e gmp)
388             infomsg "GMP            : $VER"
389         else
390             infomsg "GMP            : Test not available"
391         fi
392     fi
393 }
394
395 libunistring_check()
396 {
397     TEST=`$WHICH dpkg | grep -v "not found" 2> /dev/null`
398     if test -n "$TEST"; then
399         LINES=`dpkg -s libunistring-dev | grep Version | wc -l`
400         if test "$LINES" = "1"
401         then
402             VERSION=`dpkg -s libunistring-dev | grep Version | awk '{print $2}'`
403             infomsg "libunistring   : libunistring3-dev-$VERSION.deb"
404         else
405             errormsg "libunistring   : dpkg: libunistring3-dev not installed"
406         fi
407     else
408         TEST=`$WHICH rpm | grep -v "not found" 2> /dev/null`
409         if test -n "$TEST"; then
410             rpm -q unistring | sed -e "s/unistring-//" 2> /dev/null | \
411                 awk '{print "libunistring   : "$1.rpm}'
412         else
413             infomsg "libunistring   : Test not available"
414         fi
415         TEST=$($WHICH pkg_info | grep -v "not found" 2> /dev/null)
416         if test -n "$TEST"; then
417             VER=$(pkg_info -e libunistring)
418             infomsg "libunistring   : $VER"
419         else
420             infomsg "libunistring   : Test not available"
421         fi
422     fi
423 }
424
425 gnugettext_check()
426 {
427     TEST=`$WHICH gettext | grep -v "not found" 2> /dev/null`
428     if test -n "$TEST"; then
429         if test -n "$(gettext --version 2>&1 | awk '/unknown option/')"; then
430             infomsg "GNU gettext    : Not found"
431         else
432             VER=`gettext --version | awk '/GNU gettext/ {print $4}'`
433             infomsg "GNU gettext    : $VER"
434         fi
435     fi
436 }
437
438 gettext_check()
439 {
440     if test -n "`$WHICH getext 2>/dev/null`"; then
441         infomsg "gettext        : Found"
442     else
443         infomsg "gettext        : Not Found"
444     fi
445 }
446
447 # Merge curl_check + gnurl_check -> error if neither is
448 # found (yes those systems exist)
449 curl_check()
450 {
451     TEST=`$WHICH curl-config | grep -v "not found" 2> /dev/null`
452     if test -n "$TEST"; then
453         VER=`curl-config --version | head -n1 2> /dev/null | awk '{print $2}'`
454         infomsg "libcurl        : $VER"
455     else
456         infomsg "libcurl        : Not found"
457     fi
458 }
459
460 gnurl_check()
461 {
462     TEST=`$WHICH gnurl-config | grep -v "not found" 2> /dev/null`
463     if test -n "$TEST"; then
464         VER=`gnurl-config --version | head -n1 2> /dev/null | awk '{print $2}'`
465         infomsg "libgnurl       : $VER"
466     else
467         infomsg "libgnurl       : Not found"
468     fi
469 }
470
471 libmicrohttpd_check()
472 {
473     # TMPFILE=`mktemp /tmp/mhd-version-testXXXXXX`
474     TMPFILE="bugreport-test_lmhd.c"
475     cat - >$TMPFILE <<EOF
476 #include <microhttpd.h>
477 #include <stdio.h>
478 int main()
479 {
480   fprintf (stdout, "%X\n", MHD_VERSION);
481   return 0;
482 }
483 EOF
484     if test -x `$WHICH gcc | awk '{print $NF}'`; then
485         gcc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin "$TMPFILE"
486         VER=`./"$TMPFILE".bin`
487     elif test -x `$WHICH cc | awk '{print $NF}'`; then
488         cc $CPPFLAGS $CFLAGS -o $TMPFILE.bin $TMPFILE
489         VER=`./$TMPFILE.bin`
490     else
491         VER="Not found"
492     fi
493     infomsg "libmicrohttpd  : $VER"
494     rm -f $TMPFILE.c $TMPFILE $TMPFILE.bin
495 }
496
497 glpk_check()
498 {
499     # TMPFILE=`mktemp /tmp/glpk-version-testXXXXXX`
500     TMPFILE="bugreport-glpk_check.c"
501     cat - >$TMPFILE <<EOF
502 #include <glpk.h>
503 #include <stdio.h>
504 int main()
505 {
506   fprintf (stdout, "%u.%u\n", GLP_MAJOR_VERSION, GLP_MINOR_VERSION);
507   return 0;
508 }
509 EOF
510     if test -x `$WHICH gcc | awk '{print $NF}'`; then
511         gcc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
512         VER=`./$TMPFILE.bin`
513     elif test -x `$WHICH cc | awk '{print $NF}'`; then
514         cc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
515         VER=`./"$TMPFILE".bin`
516     else
517         VER="Not found"
518     fi
519     infomsg "GNU GLPK       : $VER"
520     rm -f $TMPFILE.c $TMPFILE $TMPFILE.bin
521 }
522
523 gnutls_check()
524 {
525     # TMPFILE=`mktemp /tmp/gnutls-version-testXXXXXX`
526     TMPFILE="bugreport-gnutls_check.c"
527     cat - >$TMPFILE <<EOF
528 #include <gnutls/gnutls.h>
529 #include <stdio.h>
530 int main()
531 {
532   fprintf (stdout, "%s\n", GNUTLS_VERSION);
533   return 0;
534 }
535 EOF
536     if test -x `$WHICH gcc | awk '{print $NF}'`; then
537         gcc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
538         VER=`./"$TMPFILE".bin`
539     elif test -x `$WHICH cc | awk '{print $NF}'`; then
540         cc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
541         VER=`./"$TMPFILE".bin`
542     else
543         VER="Not found"
544     fi
545     infomsg "GnuTLS         : $VER"
546     rm -f $TMPFILE.c $TMPFILE $TMPFILE.bin
547 }
548
549 main()
550 {
551     if test -n "$1" -a "$1" = "-h" -o "$1" = "--help"; then
552         echo "Usage: ${progname} [-h]"
553         echo "If CPPFLAGS and LDFLAGS are unset, try:"
554         echo "CPPFLAGS='-I/usr/pkg/include' LDFLAGS='-L/usr/pkg/lib' ${progname}"
555         return 0
556     fi
557     echo $LDFLAGS
558     echo $CPPFLAGS
559     infomsg "${progname} 0.11.0"
560     infomsg
561     infomsg "Please submit the following"
562     infomsg "information with your bug report:"
563     linemsg
564     os_check
565     awk_check
566     gcc_check
567     cc_check
568     cplusplus_check
569     clang_check
570     clangplusplus_check
571     gmake_check
572     make_check
573     autoconf_check
574     automake_check
575     libtool_check
576     libextractor_check
577     gnunet08_check
578     gnunet09x_check
579     gnunet010x_check
580     gnunet011x_check
581     gitcommit_check
582     gcrypt_check
583     mysql_check
584     pkgconf_check
585     pkgconfig_check
586     glib2_check
587     gtk2_check
588     gtk3_check
589     gtk4_check
590     gmp_check
591     libunistring_check
592     gnugettext_check
593     gettext_check
594     curl_check
595     gnurl_check
596     libmicrohttpd_check
597     glpk_check
598     gnutls_check
599     linemsg
600     infomsg "Bug report saved in ./my_gnunet_bugreport.log"
601 }
602
603 main "$@" 2>&1 | tee "my_gnunet_bugreport.log"