Autotools Fehlerlog auswerten

#7946077
Lesenswert?

Kennst sich jemand im Autotools Build-System aus?

Ich versuche gerade ein älteres (~2006) open source Programm auf einem aktuellen Ubuntu zu bauen. Es werden Autotools verwendet.

Habe zwar Grundkenntnisse in makefile und bash, aber von der M4 Macrosprache noch nie gehört.

Der Build ist ziemlich komplex, zuerst werden für mich nicht benötigte Libs gebaut (QT, AAC, ...), dann der eigentliche Code. Es geht um eine alte Version 1.12 des DRM Dream Decoders. Die bietet einen Simulationsmode, beispielsweise ohne das QT User Interface und die Quellendecoder AAC. Das sollte sich über Parameter ins configure steuern (abschalten mit --enable-simulation) lassen.

Zum eigentlichen Punkt: ausgehend vom Makefile.am und configure.in bauen die Autotools das sehr längliche configure. Jenes sollte dann mit übergebenen Parametern das finale makefile erzeugen. Tut es aber nicht. Meine Hoffnung ist, dass mir config.log Hinweise auf Fehler gibt. Eine Suche nach "error" liefert viele Treffer, z.B.

1
configure:4332: gcc -V >&5
2
gcc: error: unrecognized command-line option '-V'
3
gcc: fatal error: no input files
4
compilation terminated.
5
configure:4343: $? = 1
6
configure:4332: gcc -qversion >&5
7
gcc: error: unrecognized command-line option '-qversion'; did you mean '--version'?
8
gcc: fatal error: no input files
9
compilation terminated.
10
configure:4343: $? = 1
11
configure:4332: gcc -version >&5
12
gcc: error: unrecognized command-line option '-version'
13
gcc: fatal error: no input files
14
compilation terminated.

Ich frage mich, ist das von Relevanz oder werden da einfach mehrere Abfragen nach der Compilerversion nur durchiteriert? Die Sequenz taucht mehrfach im Log auf.

Weitere Frage: kann man aus den im Log angegebenen Nummern, hier als Beispiel 18699, auf die Fehler auslösende Zeile im configure schließen? Sehe da irgendwie keinen Zusammenhang. Hier eine Meldung im Log:

1
configure:18699: g++ -o conftest -g -O2 -I/home/wulf/Dokumente/HF/dream/drm/libs -I/home/wulf/Dokumente/HF/dream/drm/linux/moc   conftest.cpp -ldfftw  -lrt -lz  -L/home/wulf/Dokumente/HF/dream/drm/libs >&5
2
/usr/bin/ld: cannot find -ldfftw: No such file or directory
3
collect2: error: ld returned 1 exit status
4
configure:18699: $? = 1
5
configure: failed program was:
6
| /* confdefs.h */

Und hier die Zeile 18699 im configure:

1
  if ac_fn_cxx_try_link "$LINENO"
Angehängte Dateien:
#7946122
Lesenswert?

Nein, die gibt es nicht. An sich genommen, sind die Fehlermeldung alle plausibel. Aber wo kommen die Befehle her, sind die relevant?

"gcc -version >&5" führt auch zu einem Fehler, um mal ein Beispiel von weiter oben zu nehmen. Wenn ich das in die shell tippe, kommt exakt der gleiche Fehler wie im Log. Aber wo kommt das her?

In den Eingangsdateien wie configure.in und Makefile.am steht nichts davon. Das haben sich die Autotools irgend wo her generiert, aber woher? Ist es relevant?

: Bearbeitet durch User
#7946323
Lesenswert?

Wulf D. schrieb:

"gcc -version >&5" führt auch zu einem Fehler, um mal ein Beispiel von weiter oben zu nehmen. Wenn ich das in die shell tippe, kommt exakt der gleiche Fehler wie im Log. Aber wo kommt das her?

1
gcc -v
1
gcc --version

erzeugen zwei völlig unterschiedliche Ausgaben. Die Umleitung

1
>&5

funktioniert nur, wenn auch irgend jemand auf diesem Descriptor lauscht. In die Bash eingetippt ist das tendentiell eher unwahrscheinlich. Vermutlich wird die Ausgabe von einem weiteren Werkzeug auf ›5‹ entgegen genommen und nach bestimmten Informationen durchsucht.

#7946338
Lesenswert?

Harald K. schrieb:

Oliver S. schrieb:

gcc kennt die Optionen -v und —version. Kommen die denn da auch irgendwo vor?

Die Reaktion von Wulfs gcc auf -version sieht man hier:

Wulf D. schrieb:

configure:4332: gcc -version >&5 gcc: error: unrecognized command-line option '-version'

Finde den Unterschied… Ist hier im Forum allerdings schwer zu erkennen. Die Langversionen der Optionen haben zwei - vorne dran.

Oliver

: Bearbeitet durch User
#7946344
Lesenswert?

Oliver S. schrieb:

Ist hier im Forum allerdings schwer zu erkennen. Die Langversionen der Optionen haben zwei - vorne dran.

Dafür gibt's »PRE«

Edit: Nur mal zum Test -- --version Scheint mit Firefox und Debian-Stable auch zu funktionieren. Dieses ›verschmelzen‹ zweier Striche zu einem Langen wird also ein Browser- oder ein Betrübssystem-Problem sein.

: Bearbeitet durch User
Beitrag #7946355 wurde vom Autor gelöscht.
#7946507
Lesenswert?

gcc -- version funktioniert, wird vom configure Script auch verwendet. Aber es werden ein paar Zeilen später auch -v, -version etc verwendet.

Verstehe ich alles nicht.

Im configure Script steht z.B. dieser Abschnitt, vielleicht kommt es daher:

1
  case $ac_option in
2
  # Handling of the options.
3
  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
4
    ac_cs_recheck=: ;;
5
  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
6
    printf "%s\n" "$ac_cs_version"; exit ;;
7
  --config | --confi | --conf | --con | --co | --c )
8
    printf "%s\n" "$ac_cs_config"; exit ;;
9
  --debug | --debu | --deb | --de | --d | -d )
10
    debug=: ;;

Aber am Ende macht es meiner Meinung nach überhaupt keinen Sinn sich mit dem configure Script näher auseinander zu setzen: ist automatengeneriert und parktisch nicht menschen-lesbar ist. Allein schon die schiere Länge von über 22000 Zeilen.

Aus den beiden Komponenten Makefile.am

1
AUTOMAKE_OPTIONS = foreign
2

3
EXTRA_DIST =    \
4
  drm.spec  \
5
  drm.spec.in
6

7
SUBDIRS = linux
8

9
rpm:  Makefile
10
  make dist
11
  $(RPMBUILD) -ta $(PACKAGE)-$(VERSION).tar.gz
12
  rm $(PACKAGE)-$(VERSION).tar.gz

und eben configure.in (moderner wäre configure.ac). erzeugen die Autotools wie autoconf, automake und aclocal dann das script configure, welches in der Kommandozeile gestartet, ein maschinenabhängiges makefile als Ergebnis liefern sollte.

Nehme an, dass in den mehr als 15 Jahre alten Scripten etwas zu heutigen Systemen inkompatibles schlummert. Muss mich wahrscheinlich im Detail einarbeiten. Oder versuchen, Scripte für ein mir bekanntes Build-System zu finden (z.B. CMake).

#7946508
Lesenswert?

Oliver S. schrieb:

Finde den Unterschied… Ist hier im Forum allerdings schwer zu erkennen.

Nur wenn man die Wischversion auf dem Smartphone nutzt. Auf richtigen Webbrowsern wird ein Monospaced-Font verwendet, und da ist das sehr eindeutig zu erkennen.

Es gibt Gründe, warum man als Programmierer sowohl auf die Verwendung von Proportionalschrift als auch auf die Verwendung typographisch ansprechender Ligaturen verzichtet.

Sowas hier ist einer davon.

#7946540
Lesenswert?

Wulf D. schrieb:

gcc -- version funktioniert, wird vom configure Script auch verwendet. Aber es werden ein paar Zeilen später auch -v, -version etc verwendet.

Verstehe ich alles nicht.

Du verrennst dich da in was. Du hast das am Anfang schon richtig erkannt:

Wulf D. schrieb:

ch frage mich, ist das von Relevanz oder werden da einfach mehrere Abfragen nach der Compilerversion nur durchiteriert?

Aber am Ende macht es meiner Meinung nach überhaupt keinen Sinn sich mit dem configure Script näher auseinander zu setzen: ist automatengeneriert und parktisch nicht menschen-lesbar ist.

Richtig. Dafür ist es auch gar nicht gedacht. Ich habe mir noch nie die Details eines configure-Skriptes angesehen.

Nehme an, dass in den mehr als 15 Jahre alten Scripten etwas zu heutigen Systemen inkompatibles schlummert.

Sehr wahrscheinlich. Eigentlich sollte das configure-Skript die Kompatibilität prüfen und, falls nicht gegeben, das Problem nennen. Allerdings gibt es viele Projekte, in denen das nicht konsequent durchgezogen wurde. Das Problem würde ich eher in der fehlenden libdfftw vermuten. Eine Datei mit dem Namen scheint es früher bei FFTW2 auf manchen Distributionen gegeben zu haben, was aber eigentlich einfach nur die libfftw selbst ist.

Harald K. schrieb:

Oliver S. schrieb:

Finde den Unterschied… Ist hier im Forum allerdings schwer zu erkennen.

Nur wenn man die Wischversion auf dem Smartphone nutzt. Auf richtigen Webbrowsern wird ein Monospaced-Font verwendet, und da ist das sehr eindeutig zu erkennen.

Bei mir sieht es auf einem "richtigen Webbrowser" mit Monospace-Font aus wie im ersten Bild. Man kann es schon erkennen, aber es ist durchaus übersehbar.

Es gibt Gründe, warum man als Programmierer sowohl auf die Verwendung von Proportionalschrift als auch auf die Verwendung typographisch ansprechender Ligaturen verzichtet.

Und es gibt einen Grund, warum man Code-Tags verwenden sollte (siehe zweites Bild):

Sowas hier ist einer davon.

Angehängte Dateien:
#7946611
Lesenswert?

Rolf M. schrieb:

Das Problem würde ich eher in der fehlenden libdfftw vermuten. Eine Datei mit dem Namen scheint es früher bei FFTW2 auf manchen Distributionen gegeben zu haben, was aber eigentlich einfach nur die libfftw selbst ist.

Danke, guter Hinweis. Habe mir die Quellen für libdfftw geladen und konnte die auch fehlerfrei bauen. Jetzt muss ich die "nur" noch den alten Scripten unterschieben.

Persönliche Seite #7947599
Lesenswert?

Wulf D. schrieb:

Ich frage mich, ist das von Relevanz oder werden da einfach mehrere Abfragen nach der Compilerversion nur durchiteriert?

Ja. Natürlich ist es von Relevanz ob bestimmte Features vorhanden sind oder nicht, und wie diese gegebenenfalls anzusprechen sind. Es ist ja Sinn & Zweck von configure, das abzufragen.

Die Fehlermeldungen an sich sind nicht schlimm, ist eben die Reaktion von GCC auf nen bestimmten Test.

Wenn ein configure mit nem Fehler abbricht, dann durchsucht man config.log besser vom Ende her statt von Anfang an. Ansonsten hat man da kiloweise unkritisvche Fehlermeldungen zu durchforsten.

Zunächst ist aber mal zu beurteilen, ob die stdout Ausgabe von configure wie erwartet ist, und ob alle strikt benötigten Vorbedingungen richtig detektiert wurden. Und natürlich, ob alle benötigten Pakete / Libs vorhanden sind.

#7948758
Lesenswert?

Ja danke, habe mich so langsam mit den Autotools angefreundet und kann den configure log interpretieren. Habe mehrere Builds mit verschiedenen Konfigurationen erstellen können.

Steigen leider alle nach dem Start aus, immer irgend was mit Audio-Treibern. Sicher Inkompatibilitäten der alten SW mit aktuellem Audiosystem. Auch portaudio kann das nicht lösen. Aber ok, war ein Versuch wert.

#7948774
Lesenswert?

Kommt drauf an, wie die Software auf die Soundkarte zugreift. Es wäre praktisch, wenn es etwas genauer ginge als "irgend was mit Audio-Treibern". Die Art des Zugriffs auf die Soundkarte wurde über die Jahre mehrfach geändert. Wenn das noch auf das alte /dev/dsp zugreift, musst du dein Programm mit sowas wie padsp starten. Es könnte aber z.B. auch Jack nutzen. Dann müsstest du den jackd starten, beispielsweise über qjackctl.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren