[erlang-questions] Building a C port

Michael Truog <>
Sat Oct 15 03:05:54 CEST 2011

Answers below:

On 10/14/2011 02:53 PM, Tom Burdick wrote:
> I'm looking to wrap libsamplerate and am looking for some advice on
> how to go about it.
> I can't use NIF or port driver as libsamplerate is GPL. NIF or a port
> driver don't seem to be the right solution anyways as libsamplerate
> may take awhile to do some work and report back.
> So I'm left thinking either a C port or a C node would be best, I'm
> leaning towards a C port implementation.
> The C port example however as it shows running gcc with -I and -L
> flags pointing to a particular erlang install. I'd like to make my
> port portable so that it can compile on different machines with
> possible different versions of erlang without having to always specify
> where erlang is installed, or even worse where erl_interface is
> located.
> Do people use autotools for this? Is there a project template that
> uses autotools for this?

Some people use autotools for this.  I have within CloudI, so there is an example there:

You will notice that I am using "AC_ERLANG_CHECK_LIB([erl_interface])".  That configuration is probably more complex than what you want, but it does integrate with rebar in a way where rebar is built during the configuration.  That way you don't need a random rebar binary in your source tree (from an unknown Erlang version!).

I also have GEPD (https://github.com/okeuday/generic-erlang-port--driver-) which could allow you to switch between port and port_driver based on "whether you had permission to from the software author", or something like that, so you don't violate the GPL.  Please keep in mind I am not a lawyer, nor am I giving you legal advice.

> Could I use rebar instead?

Yes, you might be able to use rebar for doing this, but rebar integration with C/C++ port/port_driver/nif is both minimal and ad-hoc.  So, you won't have something flexible like autotools where you can use macros to add extra checking, if you need it.  Rebar integration should work for a simple case where you don't case as much about where the various executables are coming from and where the output files are going.

Good luck,

More information about the erlang-questions mailing list