Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

automake files und Qt's uic

0 views
Skip to first unread message

O.Petzold

unread,
Nov 13, 2000, 3:00:00 AM11/13/00
to
Hallo,

I möchte gerne Qt's uic in meinen automake Makefile.am's einsetzten. Nun
muß
ich mir die rules selber basteln und bin zu folgender Lösung gekommen:

%.cc: %.uic
uic -i $(patsubst %.uic,%.h $($<)) -o $@ $<

%.h: %.uic
uic -o $@ $<

# Tester for rules
pizza.o: pizza.cc pizaa.h
cc -I$(QTDIR)/include -c $< -o $@

doch leider klappt das patsubst nicht, es erscheint dort gar nichts.
Bisher sind dies
allerdings noch reine Makefile rules.

Vielen Dank Olaf

Simon Richter

unread,
Nov 13, 2000, 10:43:09 PM11/13/00
to
On Mon, 13 Nov 2000, O.Petzold wrote:

> %.cc: %.uic
> uic -i $(patsubst %.uic,%.h $($<)) -o $@ $<
>
> %.h: %.uic
> uic -o $@ $<
>
> # Tester for rules
> pizza.o: pizza.cc pizaa.h
> cc -I$(QTDIR)/include -c $< -o $@

Das ist nicht sonderlich portabel oder autokonfigurierend. Wie waere es
mit:

# configure.in
AC_ARG_WITH(uic,[--with-uic[=path] path to the UIC compiler],,with_uic=iffound)

AC_MSG_CHECKING([whether UIC support was requested])
case "x$with_uic" in
xno)
AC_MSG_RESULT(no)
UIC=/bin/false
uic=missing
;;
xyes)
AC_MSG_RESULT(yes)
AC_CHECK_PROG(uic,uic,found,missing)
if test "x$uic"="xmissing"; then
AC_MSG_ERROR([*** UIC was requested, but it is not in your
PATH. Try --with-uic=path/to/uic.])
fi
UIC=uic
;;
xiffound)
AC_MSG_RESULT(not really)
AC_CHECK_PROG(uic,uic,found,missing)
case "x$uic" in
xfound)
UIC=uic
;;
xmissing)
UIC=/bin/false
;;
*)
AC_MSG_ERROR([*** Internal error])
;;
esac
;;
x)
AC_MSG_RESULT(yes, but...)
AC_MSG_ERROR([*** No program specified for --with-uic])
;;
*)
AC_MSG_RESULT(yes)
AC_MSG_CHECKING([whether $with_uic works])
if test -f $with_uic -a -x $with_uic; then
AC_MSG_RESULT(yes)
UIC=$with_uic
else
AC_MSG_RESULT(no)
AC_MSG_ERROR([*** UIC was requested, but the specified program is
not executable])
fi
uic=found
;;
esac
AC_SUBST(UIC)

AM_CONDITIONAL(UICFOUND,[test "x$uic" = "xfound"])

# Makefile.am
SUFFIXES = .uic

UIC = @UIC@

if UICFOUND
.uic.cc:
uic -i $(<:.uic=.h) -o $@ $<

.uic.h
uic -o $@ $<
else
.uic.cc:
@echo "Warning: not rebuilding $@ -- UIC is not installed"
touch $@

.uic.h:
@echo "Warning: not rebuilding $@ -- UIC is not installed"
touch $@
endif

Das waere mein Vorschlag, so aus dem Gedaechtnis hingeschrieben und
ungetestet. Vorteile:
- Das configure-Script ueberprueft, ob uic installiert ist, und bietet
an, die mitgelieferten .cc- und .h-Files zu benutzen, wenn nicht
(sollten eh' von make dist mitgepackt werden, ansonsten nicht zu
CLEANFILES, sondern zu MAINTAINERCLEANFILES dazuschreiben).
- Du kannst angeben, welche Version von uic du verwenden willst.

> doch leider klappt das patsubst nicht, es erscheint dort gar nichts.

Das liegt an einem Klammerfehler.

Simon

--
GPG public key available from http://phobos.fs.tum.de/pgp/Simon.Richter.asc
Fingerprint: DC26 EB8D 1F35 4F44 2934 7583 DBB6 F98D 9198 3292
Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread!

O.Petzold

unread,
Nov 15, 2000, 3:00:00 AM11/15/00
to
>
> Das waere mein Vorschlag, so aus dem Gedaechtnis hingeschrieben und
> ungetestet. Vorteile:
> - Das configure-Script ueberprueft, ob uic installiert ist, und bietet
> an, die mitgelieferten .cc- und .h-Files zu benutzen, wenn nicht
> (sollten eh' von make dist mitgepackt werden, ansonsten nicht zu
> CLEANFILES, sondern zu MAINTAINERCLEANFILES dazuschreiben).
> - Du kannst angeben, welche Version von uic du verwenden willst.
>

Vielen Dank für die Lösung, dies ist 'türlich die advanced version.
Allerdings gibt'e ein Problem mit:

./configure: syntax error near unexpected token `AM_CONDITIONAL(UICFOUND,test'
./configure: ./configure: line 1475: `AM_CONDITIONAL(UICFOUND,test "x$uic" =
"xfound")'

im configure script. Soweit ich das lt. info page beurteilen kann, sollte es aber
funktionieren.
Waran liegt's ?

>
> > doch leider klappt das patsubst nicht, es erscheint dort gar nichts.
>
> Das liegt an einem Klammerfehler.
>

Wo ist der ?

Vielen Dank Olaf

Simon Richter

unread,
Nov 15, 2000, 3:00:00 AM11/15/00
to
On Wed, 15 Nov 2000, O.Petzold wrote:

> Vielen Dank für die Lösung, dies ist 'türlich die advanced version.

Hmmja, es ist eine Loesung, die mir sehr viel Arbeit erspart, wenn ich
versuche, das Programm unter NetBSD oder Solaris zum Laufen zu
bringen. :-)

> ./configure: syntax error near unexpected token `AM_CONDITIONAL(UICFOUND,test'

> im configure script. Soweit ich das lt. info page beurteilen kann, sollte es aber


> funktionieren.
> Waran liegt's ?

aclocal vergessen aufzurufen? :-)

> > > doch leider klappt das patsubst nicht, es erscheint dort gar nichts.
> > Das liegt an einem Klammerfehler.

> Wo ist der ?

$(patsubst %.uic,%.h $($<))
~~ hier

Gut, es ist nicht ganz ein Klammerfehler, vielmehr hast du ein "$(" zuviel
und das Komma vor dem dritten Argument von patsubst vergessen. Ganz
nebenbei ist patsubst natuerlich nicht portabel, weswegen ich $(<:.uic=.h)
vorgeschlagen habe.

O.Petzold

unread,
Nov 16, 2000, 3:00:00 AM11/16/00
to
>
> aclocal vergessen aufzurufen? :-)

Ja (nicht gewußt ...)

>
> > > > doch leider klappt das patsubst nicht, es erscheint dort gar nichts.
> > > Das liegt an einem Klammerfehler.
>

> > Wo ist der ?
>
> $(patsubst %.uic,%.h $($<))
> ~~ hier
>
> Gut, es ist nicht ganz ein Klammerfehler, vielmehr hast du ein "$(" zuviel
> und das Komma vor dem dritten Argument von patsubst vergessen. Ganz
> nebenbei ist patsubst natuerlich nicht portabel, weswegen ich $(<:.uic=.h)
> vorgeschlagen habe.

Vielen Dank Olaf

Simon Richter

unread,
Nov 16, 2000, 6:10:57 PM11/16/00
to
On Thu, 16 Nov 2000, O.Petzold wrote:

> > aclocal vergessen aufzurufen? :-)

> Ja (nicht gewußt ...)

Tip: automake generiert dir Rules, die die Dependencies deiner Makefiles
enthalten, du musst also nicht jedesmal von Hand automake aufrufen, ein
einfaches "make" genuegt (mit GNU make, sonst "make Makefile && make").
Diese Rules denken auch daran, aclocal.m4 neu zu erzeugen, wenn du
configure.in geandert hast. Ansonsten kannst du dir auch einfach ein
Skript schreiben, das alle Aufrufe macht, normalerweise heisst dieses
Skript autogen.sh, Inhalt in etwa:

#!/bin/sh
set -v
aclocal
autoheader
gettextize --force # falls du gettext verwendest
automake --gnu --add-missing
autoconf

O.Petzold

unread,
Nov 17, 2000, 3:00:00 AM11/17/00
to
Simon Richter wrote:

> On Thu, 16 Nov 2000, O.Petzold wrote:
>
> > > aclocal vergessen aufzurufen? :-)
>
> > Ja (nicht gewußt ...)
>
> Tip: automake generiert dir Rules, die die Dependencies deiner Makefiles
> enthalten, du musst also nicht jedesmal von Hand automake aufrufen, ein
> einfaches "make" genuegt (mit GNU make, sonst "make Makefile && make").
> Diese Rules denken auch daran, aclocal.m4 neu zu erzeugen, wenn du
> configure.in geandert hast. Ansonsten kannst du dir auch einfach ein
> Skript schreiben, das alle Aufrufe macht, normalerweise heisst dieses
> Skript autogen.sh, Inhalt in etwa:
>
> #!/bin/sh
> set -v
> aclocal
> autoheader
> gettextize --force # falls du gettext verwendest
> automake --gnu --add-missing
> autoconf
>

Vielen Dank für den Tip !
Ich hatte bisher nur von autoconf, automake und autoscan eine Ahnung, was
die machen (können). Über aclocal bin ich mir nicht im klaren. Ich hatte bisher
über T&E meine files bekommen, aber irgendwie hängt das mit den aclocal.m4 und
acinclude.m4 zusammen, nur wie ?

Bis dahin Olaf

Simon Richter

unread,
Nov 17, 2000, 3:00:00 AM11/17/00
to
On Fri, 17 Nov 2000, O.Petzold wrote:

> Ich hatte bisher nur von autoconf, automake und autoscan eine Ahnung,
> was die machen (können). Über aclocal bin ich mir nicht im klaren. Ich
> hatte bisher über T&E meine files bekommen, aber irgendwie hängt das
> mit den aclocal.m4 und acinclude.m4 zusammen, nur wie ?

aclocal.m4 enthaelt die Definitionen fuer die Makros, die nicht in der
Autoconf-Standardbibliothek sind. Der Befehl aclocal schreibt diese Datei
zusammen, indem er die Dateien aus ${prefix}/share/aclocal
zusammenkopiert, die benoetigte Definitionen enthalten. acinclude.m4
uebernimmt die Rolle von aclocal.m4 bei autoconf, sprich, das sind
weitere Definitionen, die nicht in der Standardbibliothek stehen.

0 new messages