<font color="#000000"><font face="arial,helvetica,sans-serif">Figured out what the error was and this is definitely a bug.<br><br>Steps to reproduce:<br>Create a "project" with the following tree<br><b><span style="font-family:courier new,monospace"><br>
</span></b></font></font><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><font color="#000000"><font face="arial,helvetica,sans-serif"><b><span style="font-family:courier new,monospace"> test-project $ tree</span></b></font></font><br>
<font color="#000000"><font face="arial,helvetica,sans-serif"><b><span style="font-family:courier new,monospace">.</span></b></font></font><br><font color="#000000"><font face="arial,helvetica,sans-serif"><b><span style="font-family:courier new,monospace">|-- include</span></b></font></font><br>
<font color="#000000"><font face="arial,helvetica,sans-serif"><b><span style="font-family:courier new,monospace">|   `-- f.hrl</span></b></font></font><br><font color="#000000"><font face="arial,helvetica,sans-serif"><b><span style="font-family:courier new,monospace">`-- src</span></b></font></font><br>
<font color="#000000"><font face="arial,helvetica,sans-serif"><b><span style="font-family:courier new,monospace">    `-- one.erl</span></b></font></font><br></blockquote><font color="#000000"><font face="arial,helvetica,sans-serif"><br>
f.hrl:<br></font></font><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><font color="#000000"><font face="arial,helvetica,sans-serif"><span style="font-family:courier new,monospace"><b>-define(foo, foo).</b></span></font></font><br>
</blockquote><font color="#000000"><font face="arial,helvetica,sans-serif"><br>one.erl:<br></font></font><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
<span style="font-family:courier new,monospace"><b><font color="#000000">-module(one).</font><br><font color="#000000">-include("../include/f.hrl").</font><br><font color="#000000">one() -> ?hej.</font></b></span><br>
</blockquote><div><br>Now:<br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><b><span style="font-family:courier new,monospace"> src $ cd test-project/<br>
 test-project $ touch ../include<br> test-project $ erl<br>...<br>1> c("src/one.erl").<br>src/one.erl:2: can't find include file "../include/f.hrl"<br>src/one.erl:3: undefined macro 'foo'<br>
error<br></span></b></blockquote> <br></div><font color="#000000"><font face="arial,helvetica,sans-serif">So, this fails because a component of the filename relative to cwd is not a directory, whereas relative to the location of the source-file, it would be a directory.<br>
<br>Thomas<br></font></font><br><div class="gmail_quote">On Fri, Oct 26, 2012 at 11:58 AM, Thomas Järvstrand <span dir="ltr"><<a href="mailto:thomas.jarvstrand@klarna.com" target="_blank">thomas.jarvstrand@klarna.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><font color="#000000"><font face="arial,helvetica,sans-serif">Hi!<br><br>from the file-module:<br></font></font><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">

<b><span style="font-family:courier new,monospace"><font color="#000000">path_open_first([Path|Rest], Name, Mode, LastError) -></font><br><font color="#000000">    case file_name(Path) of</font><br><font color="#000000">    {error, _} = Error -></font><br>

<font color="#000000">        Error;</font><br><font color="#000000">    FilePath -></font><br><font color="#000000">        FileName = fname_join(FilePath, Name),</font><br><font color="#000000">        case open(FileName, Mode) of</font><br>

<font color="#000000">        {ok, Fd} -></font><br><font color="#000000">            {ok, Fd, FileName};</font><br><font color="#000000">        {error, enoent} -></font><br><font color="#000000">            path_open_first(Rest, Name, Mode, LastError);</font><br>

<font color="#000000">        Error -></font><br><font color="#000000">            Error</font><br><font color="#000000">        end</font><br><font color="#000000">    end;</font></span></b><br></blockquote><div><br>
For some reason that I haven't deduced yet, my os seems to return enotdir instead of enoent when resolving a relative include. Compiling module with include-directives relative to the source in the shell will result in the call file:path_open([".", "path/to/src.erl"],"../../../relative/path/to/include", [read]), which fails because the second path in the list is never tried due to file:open/2 returning enotdir.<br>

<br>I have not yet figured out why I get this return value from the c-code, but shouldn't this be more permissive regardless? I feel that at in addition to enoent there should at least be support for eisdir and enotdir.<br>

<br>Regards<span class="HOEnZb"><font color="#888888"><br>Thomas<br></font></span></div>
</blockquote></div><br>