Thank you for the reply. First let me clarify that I use one machine for development (where I compile radius ) and another for testing (where I run radius). The problem was that on the testing machine, radclient tried to access the dictionary in a path different from the one defined in Make.inc (and src/include/radpath.h). Now, thanx to your reply, I understand the reason. In my development env, 'freeradius-devel' was not a softlink but an actual directory! Seems that in one of the earliest code-branching the actual content of the link was copied and since this directory is not *configured*, radpath.h in it wasn't updated - and of course this is the file used for compilation. So now I just have a question to better understand the usage of all these directories - please correct me if I'm wrong: /src/include - contains the source headers for development. /src/freeradius-devel - is a softlink to this dir, which facilitates experimenting with APIs (or any header definitions) by allowing to create copies of the include dir. without altering all the c files. /usr/include - the installed copy of the headers. This allows using their content for developing or changing modules on the machine itself. Thank you, Eran -----Original Message----- From: Freeradius-Devel [mailto:freeradius-devel-bounces+eran.pasternak=forescout.com@lists.freeradius.org] On Behalf Of Alan DeKok Sent: Tuesday, October 20, 2015 6:25 PM To: FreeRadius developers mailing list Subject: Re: directory prefix in freeradius-devel vs. include On Oct 20, 2015, at 10:39 AM, Eran Pasternak <eran.pasternak@forescout.com> wrote:
I'm developing FR which is not installed in the standard location. Specifically raddb dir is not the default so when running radclient (and other applications) I have to add its location (with the '-d' flag). This is required even though the compilation is configured with the appropriate @prefix@ for this location.
Hmm.. you can check the file Make.inc to see what the raddbdir is set to. radclient *will* use that directory.
I noticed that radclient.c (and others) use h files from 'freeradius-devel' and not 'include'.
Yes. Because you might already have FreeRADIUS headers installed for version X, and are building for version Y. If the build process for version Y used the standard include files, it would grab the headers for version X. And all kinds of things would go wrong. When the headers are installed, the includes that *they* use are changed. See the make files in src/include.
Now in the 'include' dir 'build-radpaths-h' uses my configured prefix while in 'freeradius-devel' it doesn't which is obviously the reason why the prefix have no effect for radclient.
I don't know what that means. "freeradius-devel" is a directory. What *file* contains the wrong prefix? Where is that file on disk? On my system, I get: $ grep RADDBDIR src/include/*.h src/include/conf.h:#define RADIUS_DIR RADDBDIR src/include/radpaths.h:#define RADDBDIR "/home/aland/test/etc/raddb" Which is fine. If I look in /usr/include/freeradius/radpaths.h, I might get a different value for RADDBDIR... because it's for a different version of the server.
I couldn't find a way to make the configure script or whatever to place the prefix in 'freeradius-devel' as well.
Again, freeradius-devel is a directory. The file src/include/radpaths.h has the correct path for RADDBDIR... *for the version you are building*. The file in /usr/include/freeradius/radpaths.h has the correct path *for the version which is installed*. The two paths might be different.
Bottom line is why are these two separate directories which are identical (aside from the paths)?
Because they're for two different versions of the server.
And how to "convey" the prefix to the files in 'freeradius-devel'.
You don't. It's added there automatically. When you're running radclient from the *installed* location, it uses the *installed* path for RADDBDIR. When you're building radclient from the *source*, that version of radclient uses the value of RADDBDIR which is taken from src/include/radpaths.h. And *nothing* in the source tree does: #include <freeradius/foo.h> It' s*always* #include <freeradius-devel/foo.h> And the freeradius-devel directory is a symlink to src/include/ in the build tree. So... *which* radclient are you running? The installed one? Or the one from the source tree? Most of this confusion can be avoided by *not* installing a production version of FreeRADIUS on a development machine. That way there's only one version of radclient, only one version of the headers, and only one path for RADDBDIR. Alan DeKok. - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/devel.html WARNING - CONFIDENTIAL INFORMATION: ________________________________ The information contained in the e-mail may contain confidential and privileged information and is intended solely for the use of the intended recipient(s). Access for any review, re-transmission, dissemination or other use of, or taking of any action in regard and reliance upon this e-mail by persons or entities other than the intended recipient(s) is unauthorized and prohibited. If you are not the intended recipient, please contact the sender by reply e-mail and destroy all copies of the original message and any attachments.