[erlang-questions] Erlang and autoconf/make

Romain Lenglet <>
Tue Nov 14 06:54:31 CET 2006


Hi,

Pupeno wrote:
> Hello,
> I am slowly trying to turn my SCons[1]-based projects into
> autoconf/make-based projects. In a sense it is a step
> backwards, but if choosing a more mainstream building system
> makes my lib easier to use better (and I'll have to maintain
> one less application, that is, I won't have to maintain
> SConsErlang).
> I am open to any suggestion about something that I might be
> doing wrong or not totally right. This is my configure.in
> http://software.pupeno.com/Serlvers/configure.in
> it is really small,

And you can make it smaller!
I believe that you reused the configure.ac from gtknode, which is 
good, but you don't need as much as in gtknode. For instance, 
you don't need to check for erl_interface, since you don't have 
C code here. (?)

Therefore, your configure.ac can be reduced to:

AC_INIT(Modules to write servers, 0.0.0, , 
serlvers)
AC_COPYRIGHT(Copyright (C) 2006 Jose Pablo Pupeno Fernandez)

dnl Require autoconf version >=2.59c. first one with erlang 
macros
AC_PREREQ(2.59c)
dnl Require automake version >=1.9.5.
AM_INIT_AUTOMAKE(1.9.5)

AC_ERLANG_NEED_ERLC

AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR(AC_PACKAGE_TARNAME, 
AC_PACKAGE_VERSION)

AC_CONFIG_FILES([Makefile src/Makefile])

AC_OUTPUT


Oh, and please call your file configure.ac instead of 
configure.in. This has been the new convention for a while. 
Since we require Autoconf version >= 2.59c, we are sure that the 
Autoconf that will be used supports that convention.

> and this is the main Makefile.am 
> http://software.pupeno.com/Serlvers/src/Makefile.am
> And in that last one is where I am worried. I have to list the
> sources and the beam files, is that needed ? I have to also
> put the .app among the (automatically generated) beam files,
> is that needed as well ? I mean, isn't there a better way ?

If your .app file is not generated, and is therefore a "source 
file", then it must be explicitly included in the distributed 
files (EXTRA_DIST), like the .erl files, and it must *not* be 
included in the files to clean (CLEANFILES).
However, since your .app file must be installed in a directory 
different from .../src/, you can't add your .app files into the 
erlsrc_DATA variable, so you must define new erlapp* variables:

erlsrcdir = $(ERLANG_INSTALL_LIB_DIR_serlvers)/src
erlsrc_DATA = dns_msg.erl gen_chargen.erl gen_daytime.erl 
gen_dns.erl gen_echo.erl gen_time.erl launcher.erl
EXTRA_DIST = $(erlsrc_DATA)

erlbeamdir = $(ERLANG_INSTALL_LIB_DIR_serlvers)/ebin
erlbeam_DATA = dns_msg.beam gen_chargen.beam gen_daytime.beam 
gen_dns.beam gen_echo.beam gen_time.beam launcher.beam
CLEANFILES = $(erlbeam_DATA)

erlappdir = $(erlbeamdir)
erlapp_DATA = serlvers.app
EXTRA_DIST += $(erlapp_DATA)

SUFFIXES = .erl .beam
.erl.beam:
	$(ERLC) $(ERLCFLAGS) -b beam $<



And likewise, you should define a series of variables for every 
other kind of source or generated files (.rel, etc.) if you have 
any.

Now, your files are nice and clean! (^_^)


> Something closer to what I've done with SCons[2] ? Thank you.

Sorry, I don't know much about SCons.
But the files above seem to do the same as yours.


Hopefully, Ruslan Babayev may add support for Erlang in Automake, 
to help writing Makefile.am files. Until then, we will have to 
explicitly write separate sets of variables for different kinds 
of files, in Makefile.am files, as shown above.


Regards,

-- 
Romain LENGLET
-- 
Romain LENGLET
Pr. Chiba Shigeru Group
Dept. of Mathematical and Computing Sciences
Tokyo Institute of Technology



More information about the erlang-questions mailing list