[ALG] Het schrijven van een configure.ac

Pagina: 1
Acties:

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
Hey.
Ik probeer een configure.ac te schrijven met behulp van google en een link die ik van Beelzebubu heb gekregen. (Het is meer NOS dan PW dus daarom hier)Er is alleen iets vaags:
Ik krijg deze meldingen:

code:
1
2
3
4
5
6
aclocal: configure.ac: 15: macro `AM_DISABLE_STATIC' not found in library
autoheader2.50: `config.h.in' is unchanged
configure.ac:15: error: possibly undefined macro: AM_DISABLE_STATIC
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL


en de bijbehorende regels zijn:

code:
1
2
3
AM_DISABLE_STATIC
#AC_PROG_RANLIB
AC_PROG_LIBTOOL


dit volgends vele guides die ik heb gelezen.
Hij gaat nog door. configure wordt gemaakt, maar als ik die run staat er dit:

code:
1
2
./configure: line 4601: syntax error near unexpected token `GLIB,'
./configure: line 4601: `            PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.0.1 gobject-2.0 gthread-2.0 gmodule-2.0, ,'


bij de regels:

code:
1
2
3
4
5
      dnl Check for glib2
      PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.0.1 gobject-2.0 gthread-2.0 gmodule-2.0, ,
        AC_MSG_ERROR(You don't have glib-2.0 (1.3) installed))
        AC_SUBST(GLIB_LIBS)
        AC_SUBST(GLIB_CFLAGS)


ook geeft hij nu echt aan dat AC_PROG_LIBTOOL niet bestaat:

code:
1
2
./configure: line 2969: AM_DISABLE_STATIC: command not found
./configure: line 2971: AC_PROG_LIBTOOL: command not found


Ik heb geen flauw idee meer wat ik fout doe. ik heb uiteraard in de manuals gelezen, gezocht, maar telkens staat er dat ik het bovenstaande moet doen.

Ik gebruik deze versies van de programma's:

code:
1
2
3
4
5
6
7
8
thijs@Thijs:~/hottopic$ aclocal --version
aclocal (GNU automake) 1.7
thijs@Thijs:~/hottopic$ autoconf --version
autoconf (GNU Autoconf) 2.54
thijs@Thijs:~/hottopic$ autoheader --version
autoheader (GNU Autoconf) 2.54
thijs@Thijs:~/hottopic$ automake --version
automake (GNU automake) 1.7


Automake1.7 is dacht ik redelijk nieuw, net als autoconf 2.54, dus daar zal het niet aan liggen. Iemand een idee ?

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 16-05 16:33

odysseus

Debian GNU/Linux Sid

Uit Google vis ik dat je een libtool.m4 mist of dat die niet gevonden wordt...zie ook hier. Helaas heb ik te weinig ervaring met het zelf schrijven van die scripts om er verder veel over te zeggen (ik gebruik ze normaal alleen, schrijf ze niet zelf).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Het gaat met name om aclocal. Die haalt de m4 macro's op en storet ze lokaal voor de configure file. Kijk eens in /usr/share/aclocal*/*, zorg dat aclocal de juiste include dirs gebruikt (desnoods 'aclocal -I /usr/share/aclocal-1.6' o.i.d.).

Heb je toevallig meerdere versies van aclocal geinstalleerd of heb je versies geupgrade?

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
Ik heb het nu werkend. inderdaad met de -I flag. Alleen doet de Makefile.in in de src/ dir het niet. Hij krijgt de cflags niet door?
zo ziet mijn Makefile.in eruit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SUBDIRS = src img

bin_PROGRAMS = HotTopic

INCLUDES = \
        $(GLIB_CFLAGS) \
        $(EXTRA_CFLAGS)

hottopicinclude_HEADERS = \
        aboutbox.h         docklet.h    functions.h   timeouthandler.h\
        configurewindow.h  externals.h  mainwindow.h

hottopic_LDFLAGS = \
        $(GLIB_LIBS) \
        $(LIBXML_LIBS)
hottopic_SOURCES = \
        aboutbox.c   configurewindow.c  externals.c  got_topics.c  timeouthandler.c\
        callbacks.c  docklet.c          functions.c  mainwindow.c

all: aboutbox.o   configurewindow.o  externals.o  got_topics.o  timeouthandler.o\
        callbacks.o  docklet.o          functions.o  mainwindow.o
        $(CC) $(INCLUDES) $(hottopic_LDFLAGS) -o $* $o+


./configure maakt er een mooie Makefile van.. en als ik make typ staat er:

code:
1
cc    -c -o aboutbox.o aboutbox.c


en dan bergen errors wegens includes die niet gevonden zijn.

Hier gaat gat dus fout. Waar kan dit aan liggen? Ik weet niet wat ik verder qua info moet geven, maar als je iets wil weten: gil maar ;)

Verwijderd

Kloppen de CFLAGS in de andere dirs (met name in de topdir dus) het wel?

Ik moet eigenlijk ff de directory sturctuur van de build dirs hebben, en alle bijbehorende Makefile.am's en de configure.ac.

[edit]

code:
1
2
3
4
5
      dnl Check for glib2
      PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.0.1 gobject-2.0 gthread-2.0 gmodule-2.0, ,
        AC_MSG_ERROR(You don't have glib-2.0 (1.3) installed))
        AC_SUBST(GLIB_LIBS)
        AC_SUBST(GLIB_CFLAGS)


Check de indenting! :P.

code:
1
2
3
4
5
      dnl Check for glib2
      PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.0.1 gobject-2.0 gthread-2.0 gmodule-2.0, ,
        AC_MSG_ERROR(You don't have glib-2.0 (1.3) installed))
      AC_SUBST(GLIB_LIBS)
      AC_SUBST(GLIB_CFLAGS)

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
De dir structuur is als volgt:
code:
1
2
3
4
5
[HotTopic]
    |
    |----- IMG
    |----- SRC
    |----- Plugins

simpel dus :)
de Makefile.in 's van plugins en IMG zijn eigenlijk niets (de make install heb ik nog niet gemaakt)
code:
1
2
all:
install:


de Makefile.in van SRC heb je.

de Makefile.in van de rootdir is nogal groot dus die ga ik even uploaden
en de Makefile.am:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SUBDIRS = src img

bin_PROGRAMS = hottopic

INCLUDES = \
    $(GLIB_CFLAGS) \
    $(EXTRA_CFLAGS)

hottopicincludedir = $(includedir)/hottopic
hottopicinclude_HEADERS = \
        src/aboutbox.h src/configurewindow.h src/externals.h\
    src/got_topics.h  src/timeouthandler.h \
    src/callbacks.h src/docklet.h src/functions.h  src/mainwindow.h


hottopic_LDFLAGS = \
            $(GLIB_LIBS) \
            $(LIBXML_LIBS)

hottopic_SOURCES = \
        src/aboutbox.c   src/configurewindow.c  src/externals.c \
    src/got_topics.c  src/timeouthandler.c \
    src/callbacks.c  src/docklet.c src/functions.c  src/mainwindow.c


De configure.ac ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
AC_INIT(HotTopic, 1.0)  
AC_CONFIG_SRCDIR(src/externals.h)
AM_INIT_AUTOMAKE(${PACKAGE_NAME}, ${PACKAGE_VERSION})
    
AM_CONFIG_HEADER(config.h)

ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"

ifdef([m4_pattern_allow],
      [m4_pattern_allow([^AM_(C|CPP|CXX|OBJC|F|R|GCJ)FLAGS$])])dnl
ifdef([m4_pattern_allow], [m4_pattern_allow([AM_PROG_LIBTOOL])])
AC_PROG_CC
AC_STDC_HEADERS

AM_DISABLE_STATIC
#AC_PROG_RANLIB
AC_PROG_LIBTOOL

AC_CHECK_FUNCS([strchr])
AC_CHECK_FUNCS([strrchr])
AC_CHECK_HEADERS([netdb.h])
AC_CHECK_HEADERS([netinet/in.h])
AC_CHECK_HEADERS([stdlib.h])
AC_CHECK_HEADERS([string.h])
AC_CHECK_HEADERS([sys/socket.h])        
AC_CHECK_HEADERS([unistd.h])
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_C_CONST
dnl modify pkg-config path
AC_ARG_WITH(pkg-config-path, 
   AC_HELP_STRING([--with-pkg-config-path],[colon-separated list of pkg-config(1) dirs]),
      [export PKG_CONFIG_PATH=${withval}])

      dnl Check for glib2
      PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.0.1 gobject-2.0 gthread-2.0 gmodule-2.0, ,
        AC_MSG_ERROR(You don't have glib-2.0 (1.3) installed))
    AC_SUBST(GLIB_LIBS)
    AC_SUBST(GLIB_CFLAGS)

    dnl check for libxml2
    PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.4.0, ,
      AC_MSG_ERROR(You don't have libxml2-2.4 installed))
      AC_SUBST(LIBXML_LIBS)
      AC_SUBST(LIBXML_CFLAGS)

      dnl be clean and use pure GLib-2.0
      EXTRA_CFLAGS="-DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1"
      AC_SUBST(EXTRA_CFLAGS)

      AC_OUTPUT([
      Makefile
      img/Makefile
      src/Makefile
      plugins/Makefile
      ])

      echo
      echo "Now type 'make' to compile ${PACKAGE_NAME}-${PACKAGE_VERSION}."


Hopelijk kan je hier iets mee.
[edit]
Ik heb onderaan configure.ac dit gezet:

code:
1
echo $GLIB_LIBS $GLIB_CFLAGS $LIBXML_LIBS $LIBXML_CFLAGS $EXTRA_CFLAGS

en dat geeft netjes:
code:
1
-Wl,--export-dynamic -lgobject-2.0 -lgthread-2.0 -lpthread -lgmodule-2.0 -ldl -lglib-2.0 -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lxml2 -lz -lm -I/usr/include/libxml2 -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1

dus in de configure zit het goed

Verwijderd

Die Makefile.in's zijn veel te klein.

edit:
Ga ff denken, ik zeg zo iets zinnigs.


Heb je na het opnieuw uitvoeren van aclocal wel autoheader, autoconf en automake (in die volgorde) opnieuw uitgevoerd?

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
Ja hoor,
ik heb een ./autogen.sh gemaakt met die commandos en die heb ik telkens uitgevoert.
hier is trouwens de Makefile.in:

http://members.chello.nl/~g.assies/Makefile.in

Verwijderd

Ik denk dat het komt omdat je geen localdir builds doet per directory... Zal ik even proberen uit te leggen...

Wat jij momenteel doet, is in ./Makefile.am de build van de source files in de ./src/ directory definieren. Dat doe je in ./src/Makefile.am echter nogmaals. Wat dus de bedoeling is, is dat je dat allemaal alleen in ./src/ doet. Bovendien staan er in ./src/Makefile.am SUBDIRS variabelen die er niet horen. Wat ik zou adviseren is het volgende:

./Makefile.am:
code:
1
SUBDIRS = src img plugins


./src/Makefile.am:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bin_PROGRAMS = hottopic

INCLUDES = \
        $(GLIB_CFLAGS) \
        $(EXTRA_CFLAGS)

hottopicinclude_HEADERS = \
        aboutbox.h         docklet.h    functions.h   timeouthandler.h\
        configurewindow.h  externals.h  mainwindow.h

hottopic_LDFLAGS = \
        $(GLIB_LIBS) \
        $(LIBXML_LIBS)
hottopic_SOURCES = \
        aboutbox.c   configurewindow.c  externals.c  got_topics.c  timeouthandler.c\
        callbacks.c  docklet.c          functions.c  mainwindow.c


Note dat hottopic zonder caps is, caps in een bin-applicatie gebruiken is vrij ongebruikelijk onder linux/unix. ./img/Makefile.am en ./plugins/Makefile.am kunnen leeg blijven (for now).

In configure.ac maak je dan src/Makefile, img/Makefile, plugins/Makefile en Makefile. Als het goed is werkt het dan wel.

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
Ik heb gedaan wat je zei.
Hij doet nu meer, alleen ik krijg dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
make  all-recursive
make[1]: Entering directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome'
Making all in src
make[2]: Entering directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome/src'
source='aboutbox.c' object='aboutbox.o' libtool=no \
depfile='.deps/aboutbox.Po' tmpdepfile='.deps/aboutbox.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'aboutbox.c' || echo './'`aboutbox.c
source='configurewindow.c' object='configurewindow.o' libtool=no \
depfile='.deps/configurewindow.Po' tmpdepfile='.deps/configurewindow.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'configurewindow.c' || echo './'`configurewindow.c
source='externals.c' object='externals.o' libtool=no \
depfile='.deps/externals.Po' tmpdepfile='.deps/externals.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'externals.c' || echo './'`externals.c
source='got_topics.c' object='got_topics.o' libtool=no \
depfile='.deps/got_topics.Po' tmpdepfile='.deps/got_topics.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'got_topics.c' || echo './'`got_topics.c
source='timeouthandler.c' object='timeouthandler.o' libtool=no \
depfile='.deps/timeouthandler.Po' tmpdepfile='.deps/timeouthandler.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'timeouthandler.c' || echo './'`timeouthandler.c
source='docklet.c' object='docklet.o' libtool=no \
depfile='.deps/docklet.Po' tmpdepfile='.deps/docklet.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'docklet.c' || echo './'`docklet.c
source='functions.c' object='functions.o' libtool=no \
depfile='.deps/functions.Po' tmpdepfile='.deps/functions.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'functions.c' || echo './'`functions.c
source='mainwindow.c' object='mainwindow.o' libtool=no \
depfile='.deps/mainwindow.Po' tmpdepfile='.deps/mainwindow.TPo' \
depmode=none /bin/sh ../depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -DG_DISABLE_DEPRECATED=1 -Werror -Wall -D_GNU_SOURCE=1    -g -O2 -c `test -f 'mainwindow.c' || echo './'`mainwindow.c
/bin/sh ../libtool --mode=link gcc  -g -O2   -o hottopic -Wl,--export-dynamic -lgobject-2.0 -lgthread-2.0 -lpthread -lgmodule-2.0 -ldl -lglib-2.0   -lxml2 -lz -lm   aboutbox.o configurewindow.o externals.o got_topics.o timeouthandler.o docklet.o functions.o mainwindow.o  
gcc -g -O2 -o hottopic -Wl,--export-dynamic aboutbox.o configurewindow.o externals.o got_topics.o timeouthandler.o docklet.o functions.o mainwindow.o  /usr/lib/libgobject-2.0.so /usr/lib/libgthread-2.0.so -lpthread /usr/lib/libgmodule-2.0.so -ldl /usr/lib/libglib-2.0.so /usr/lib/libxml2.so -lz -lm
make[2]: Leaving directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome/src'
make[1]: Leaving directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome'
gcc: aboutbox.o: No such file or directory
gcc: configurewindow.o: No such file or directory
gcc: externals.o: No such file or directory
gcc: got_topics.o: No such file or directory
gcc: timeouthandler.o: No such file or directory
gcc: docklet.o: No such file or directory
gcc: functions.o: No such file or directory
gcc: mainwindow.o: No such file or directory
make[2]: *** [hottopic] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2


Het lijkt alsof hij compiled, maar dat doet het niet. Wat is hier aan de hand?

Verwijderd

Je hebt in je ./Makefile.am nog steeds references staan naar die files, die moet je dus weghalen. ;).

Verwijderd

Verwijderd schreef op 17 november 2002 @ 18:44:
Je hebt in je ./Makefile.am nog steeds references staan naar die files, die moet je dus weghalen. ;).
arrogant figuur ;) >:)

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
Uh,nee. ik heb de Makefile.am zoals je zei. ik heb opnieuw ./autogen.sh gedaan en dat ging goed. Er staat ook dat de fout zit in de Makefile van ./src
code:
1
2
make[2]: *** [hottopic] Error 1
make[2]: Leaving directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome/src'


Hij zit dus nog in ./src

/edit:

er is in src wel een map .deps gekomen met daarin .Po bestanden.

  • Buzzman
  • Registratie: Juni 2000
  • Niet online
Op verzoek van D2k een titelchange ;)

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
Buzzman schreef op 17 November 2002 @ 18:58:
Op verzoek van D2k een titelchange ;)
Zeg! onzin graag in de HK! of heb je nog wat nuttigs bij te dragen? :+ :+

Verwijderd

ParaDot schreef op 17 november 2002 @ 18:54:
Uh,nee. ik heb de Makefile.am zoals je zei. ik heb opnieuw ./autogen.sh gedaan en dat ging goed. Er staat ook dat de fout zit in de Makefile van ./src
code:
1
2
make[2]: *** [hottopic] Error 1
make[2]: Leaving directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome/src'


Hij zit dus nog in ./src
In je post daarnet niet? :?.

Of is het nou weer een andere fout?
er is in src wel een map .deps gekomen met daarin .Po bestanden.
Klopt, die hoort er.

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 01-01 18:43
ik denk het?

ik krijg nu:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<knip>
gcc -g -O2 -o hottopic -Wl,--export-dynamic aboutbox.o configurewindow.o externals.o got_topics.o timeouthandler.o docklet.o functions.o mainwindow.o  /usr/lib/libgobject-2.0.so /usr/lib/libgthread-2.0.so -lpthread /usr/lib/libgmodule-2.0.so -ldl /usr/lib/libglib-2.0.so /usr/lib/libxml2.so -lz -lm
gcc: aboutbox.o: No such file or directory
gcc: configurewindow.o: No such file or directory
gcc: externals.o: No such file or directory
gcc: got_topics.o: No such file or directory
gcc: timeouthandler.o: No such file or directory
gcc: docklet.o: No such file or directory
gcc: functions.o: No such file or directory
gcc: mainwindow.o: No such file or directory
make[2]: *** [hottopic] Error 1
make[2]: Leaving directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/thijs/progsels/hottopic_gnome/Hottopic_gnome-0.2/project/Hottopic_gnome'
make: *** [all] Error 2

Verwijderd

Zonet kreeg je dat namelijk nadat de build in src/ was gedaan. Oftewel, je lijkt nu weer terug bij af... Vaagf?? :?.

Kun je ff de volledige tarball ergens uploaden? Dat kijkt wat makkelijker. ;).
Pagina: 1