Automake Support for cyrus-imapd 2.5

Дилян Палаузов dilyan.palauzov at aegee.org
Mon Apr 16 05:57:36 EDT 2012


Hello,

My comments on Greg's 2nd comments on my comments on my commits:

> commit "*/Makefile.in: add top_(builddir,srcdir) to CPPFLAGS"
>
> +CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)
> -I$(top_builddir)/lib @COM_ERR_CPPFLAGS@ @CPPFLAGS@ @SASLFLAGS@
>
> Surely the correct order is
>
> -I$(top_builddir)
> -I$(top_srcdir)
> -I$(top_builddir)/lib
> -I$(top_srcdir)/lib
>
> ?

Yes.

>
> Also, why do we have "-I. -I$(srcdir)" in some CPPFLAGS but not others?

The final Makefile.am does not have -I$(srcdir), probably as 
intermediate step -I$(srcdir) was necessary.

> commit "perl/Makefile*: enable building perl modules out of srcdir"
>
> +                       if [ -f ../${srcdir}/$$d/Makefile.PL -a ! -f
> Makefile ]; then \
>
> This breaks if $srcdir is an absolute rather than a relative path.  In
> fact so does this
>
> +                          srcdir="../${srcdir}/$$d" \
> +                          top_srcdir="../$(top_srcdir)" \
>
> It might be a whole lot simpler to generate Makefile.PL from
> Makefile.PL.in at configure time.  Then, you could run the Makefile.PL
> from configure using AC_CONFIG_COMMANDS.
>
> +    INSTALLDIRS =>  'vendor',
>
> Please don't do that!  I just had to do a whole bunch of futzing to
> avoid it :(

INSTALLDIRS =>  'vendor' was initially there, then it was removed by you 
on Friday with commit abd6dcd95abd329b3a (Revert "Bug 3652 - install 
Perl modules into 'vendor' dirs"), but somehow was not merged very 
correctly in my branch.

I think the perl builds deserve a separate discussion.

> commit "imap/Makefile.in: order everything alphabetically"
>
> My comments from lib/Makefile.in about splitting these up 1 per line
> also apply here.
>
> In LOBJS, imapparse,o, message.o, saslclient.o, saslserver.o are out of
> order.
>
> In IMAPDOBJS, proxy.o is out of order.
>
> In PROGS, cyr_dbtool and cyrdump are out of order
>
> There's a reason why $SERVICE ought to be linked first, or at the very
> least before any libraries from outside the project: it contains main()
> and must have the first definition of main() seen by the linker even if
> some library also defines main().

Yes, but in the final Makefile.am things are correct.

In master:Makefile is written: SUBDIRS = @SERVER_SUBDIRS", and 
SERVER_SUBDIRS is "master imap" according to master:configure.in.

master:master/Makefile.in contains
LOBJS = service.o service-thread.o
all: $(LOBJS)

so I thought the reason for the ordering of master/ before imap/ was to 
make sure, that service.o is compiled in master/, before changing to imap/.

As with linking, in Automake there are _SOURCES and _LDADD.  $SERVICE 
goes into _SOURCES, any libraries go into _LDADD.  It is not really 
possible with Automake to force linking a library before linking $SERVICE.

Please feel entitled to correct the order of cyr_df and cyrdump.

> cyr_info links masterconf.o but does not depend on it.

cyr_info does depend on masterconf.o .
> commit "rename $service_path to $servicedir"
>
>
> +AC_DEFINE_UNQUOTED(SERVICE_PATH,"$servicedir",[Directory to use for
> service binaries])
>
> Don't you want to rename SERVICE_PATH too?

Yes, this could be also done.

> Also, the difference between $servicedir and $bindir is slight; in the
> default arrangement one will be /usr/cyrus/bin and the other /usr/bin.
> I would hope that eventually we could eliminate $cyrus_prefix and
> replace $servicedir with $bindir.

Yes, but this is not really related to the switch to Automake.
>
>   commit "remove cyrus_prefix from every Makefile.in, as it is unused"
>
> Since three days ago, it is used, in the perl/ directories to expand
> $PERL_PREINSTALL.  Otherwise, looks good.

Yes, please fix it somehow.

> commit "Initial Automake support"
>
> Do we need the 'depend' target?  Surely automake handles that for us.
>
> +       SIEVE_LIBS="../sieve/libsieve.a"
>
> $(top_builddir)

The depend target is removed in subsequent commits together with makedepend.

SIEVE_LIBS can be extended with $(top_builddir).  In fact at the end, 
SIEVE_LIBS and SIEVE_OBJS are used only for Cunit checks.  So if 
Cunit/Makefile.in can be merged to /Makefile.am SIEVE_LIBS and 
SIEVE_OBJS can be completely removed from configure.ac .

Със здраве
   Дилян


More information about the Cyrus-devel mailing list