Discussion:
Building or not building ROOT dictionaries?
Sébastien Gadrat
2014-09-19 14:53:48 UTC
Permalink
Dear ROOTers,

I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.

How can I tell ROOT where to find the external headers for dictionaries
compilation?

Thank you!
Regards,

Sébastien
--
Sébastien Gadrat
CMS Collaboration @LHC/CERN - CMS Tier-1 Contact Person
CNRS/IN2P3 Computing Center
Lyon/France
Phone: +33 (0)4 78 93 08 80
Sébastien Gadrat
2014-09-19 15:03:05 UTC
Permalink
Dear all,

Just forget my e-mail... There were a "stupid" mistake in the Makefile...

Sébastien
Post by Sébastien Gadrat
Dear ROOTers,
I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.
How can I tell ROOT where to find the external headers for dictionaries
compilation?
Thank you!
Regards,
Sébastien
--
Sébastien Gadrat
CMS Collaboration @LHC/CERN - CMS Tier-1 Contact Person
CNRS/IN2P3 Computing Center
Lyon/France
Phone: +33 (0)4 78 93 08 80
Sébastien Gadrat
2014-09-19 15:20:12 UTC
Permalink
Hi again,

Well, actually the way I was compiling dictionaries with ROOT 5 does not
work with ROOT 6. I am trying to make my piece of code compatible with
both ROOT version. What is the simple way to do it ?

Thanks!
Regards,

Sébastien
Post by Sébastien Gadrat
Dear all,
Just forget my e-mail... There were a "stupid" mistake in the Makefile...
Sébastien
Post by Sébastien Gadrat
Dear ROOTers,
I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.
How can I tell ROOT where to find the external headers for dictionaries
compilation?
Thank you!
Regards,
Sébastien
--
Sébastien Gadrat
CMS Collaboration @LHC/CERN - CMS Tier-1 Contact Person
CNRS/IN2P3 Computing Center
Lyon/France
Phone: +33 (0)4 78 93 08 80
Philippe Canal
2014-09-19 15:21:22 UTC
Permalink
Hi Sebastien,

How is it not compatible? What failure do you see?

Philippe.
Post by Sébastien Gadrat
Hi again,
Well, actually the way I was compiling dictionaries with ROOT 5 does not
work with ROOT 6. I am trying to make my piece of code compatible with
both ROOT version. What is the simple way to do it ?
Thanks!
Regards,
Sébastien
Post by Sébastien Gadrat
Dear all,
Just forget my e-mail... There were a "stupid" mistake in the Makefile...
Sébastien
Post by Sébastien Gadrat
Dear ROOTers,
I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.
How can I tell ROOT where to find the external headers for dictionaries
compilation?
Thank you!
Regards,
Sébastien
Sébastien Gadrat
2014-09-19 16:46:14 UTC
Permalink
Hello Philippe,

Here is what I do. My Makefile links to ROOT_DIR/etc/Makefile.arch. Then
I have the following in the Makefile:

AllDict.$(SrcSuf): $(CLOUDSTOR_INC) LinkDef.h
$(ROOTCINT) -v4 -f $@ -c $^

which allows me to compile the dictionaries for any ROOT 5 version. The
files in the $(CLOUDSTOR_INC) variable depends on an external library,
but rootcint is able to pick them up and everything compiles smoothly.

I have also "freshly" installed ROOT v6.00.02, but this does not work
anymore. First the ROOTCINT variable is not set [*]. But if I set it by
"hand", then the external headers are not found, and I end up with this
message:

rootcling -v4 -f AllDict.cxx -c THttpFile.h THttpSession.h ...
TCloudExtension.h LinkDef.h
In file included from input_line_11:1:
In file included from ././AllDict6b43b7d8d3_dictUmbrella.h:7:
./THttpSession.h:40:10: fatal error: 'ne_session.h' file not found
#include "ne_session.h"

Thanks for your help!
Regards,

Sébastien

[*]: it seems to come from the "root-config --dicttype" which does not
exist in ROOT 6.
Post by Philippe Canal
Hi Sebastien,
How is it not compatible? What failure do you see?
Philippe.
Post by Sébastien Gadrat
Hi again,
Well, actually the way I was compiling dictionaries with ROOT 5 does not
work with ROOT 6. I am trying to make my piece of code compatible with
both ROOT version. What is the simple way to do it ?
Thanks!
Regards,
Sébastien
Post by Sébastien Gadrat
Dear all,
Just forget my e-mail... There were a "stupid" mistake in the Makefile...
Sébastien
Post by Sébastien Gadrat
Dear ROOTers,
I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.
How can I tell ROOT where to find the external headers for
dictionaries
compilation?
Thank you!
Regards,
Sébastien
--
Sébastien Gadrat
CMS Collaboration @LHC/CERN - CMS Tier-1 Contact Person
CNRS/IN2P3 Computing Center
Lyon/France
Phone: +33 (0)4 78 93 08 80
Philippe Canal
2014-09-19 16:50:23 UTC
Permalink
Hi Sébastien,
Post by Sébastien Gadrat
First the ROOTCINT variable is not set [*].
Humm ... for backward compatibility we should indeed continue to (deprecatedly) define it.
Post by Sébastien Gadrat
#include "ne_session.h"
this seems like of you headers. Were they previous hidden from CINT (with a #ifndef __CINT__
or #ifndef __MAKECINT__) ...

I.e. this is not a ROOT header and rootcling can not guess where to find it. You would need
to either hide it from rootcling (with #ifndef __ROOTCLING__) or you would have to add the
same -I... that you add to your compilation line.

Cheers,
Philippe.
Post by Sébastien Gadrat
Hello Philippe,
Here is what I do. My Makefile links to ROOT_DIR/etc/Makefile.arch. Then
AllDict.$(SrcSuf): $(CLOUDSTOR_INC) LinkDef.h
which allows me to compile the dictionaries for any ROOT 5 version. The
files in the $(CLOUDSTOR_INC) variable depends on an external library,
but rootcint is able to pick them up and everything compiles smoothly.
I have also "freshly" installed ROOT v6.00.02, but this does not work
anymore. First the ROOTCINT variable is not set [*]. But if I set it by
"hand", then the external headers are not found, and I end up with this
rootcling -v4 -f AllDict.cxx -c THttpFile.h THttpSession.h ...
TCloudExtension.h LinkDef.h
./THttpSession.h:40:10: fatal error: 'ne_session.h' file not found
#include "ne_session.h"
Thanks for your help!
Regards,
Sébastien
[*]: it seems to come from the "root-config --dicttype" which does not
exist in ROOT 6.
Post by Philippe Canal
Hi Sebastien,
How is it not compatible? What failure do you see?
Philippe.
Post by Sébastien Gadrat
Hi again,
Well, actually the way I was compiling dictionaries with ROOT 5 does not
work with ROOT 6. I am trying to make my piece of code compatible with
both ROOT version. What is the simple way to do it ?
Thanks!
Regards,
Sébastien
Post by Sébastien Gadrat
Dear all,
Just forget my e-mail... There were a "stupid" mistake in the Makefile...
Sébastien
Post by Sébastien Gadrat
Dear ROOTers,
I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.
How can I tell ROOT where to find the external headers for
dictionaries
compilation?
Thank you!
Regards,
Sébastien
Sébastien Gadrat
2014-10-06 16:57:22 UTC
Permalink
Hello Philippe,

And thanks for your help, I fixed the few errors I had.

I just have one more question. By default the plugin has to be put in:
$(ROOTSYS)/etc/root/plugins/TFile (it is a TFile plugin of course).

However I would like to put it in some other place (testing different
things, I want to keep the ROOT directory clean). What is the best and
easiest way to tell ROOT where to look for plugins?

Thanks again!
Cheers,

Sébastien
Post by Philippe Canal
Hi Sébastien,
Post by Sébastien Gadrat
First the ROOTCINT variable is not set [*].
Humm ... for backward compatibility we should indeed continue to (deprecatedly) define it.
Post by Sébastien Gadrat
#include "ne_session.h"
this seems like of you headers. Were they previous hidden from CINT
(with a #ifndef __CINT__
or #ifndef __MAKECINT__) ...
I.e. this is not a ROOT header and rootcling can not guess where to
find it. You would need
to either hide it from rootcling (with #ifndef __ROOTCLING__) or you would have to add the
same -I... that you add to your compilation line.
Cheers,
Philippe.
Post by Sébastien Gadrat
Hello Philippe,
Here is what I do. My Makefile links to ROOT_DIR/etc/Makefile.arch. Then
AllDict.$(SrcSuf): $(CLOUDSTOR_INC) LinkDef.h
which allows me to compile the dictionaries for any ROOT 5 version. The
files in the $(CLOUDSTOR_INC) variable depends on an external library,
but rootcint is able to pick them up and everything compiles smoothly.
I have also "freshly" installed ROOT v6.00.02, but this does not work
anymore. First the ROOTCINT variable is not set [*]. But if I set it by
"hand", then the external headers are not found, and I end up with this
rootcling -v4 -f AllDict.cxx -c THttpFile.h THttpSession.h ...
TCloudExtension.h LinkDef.h
./THttpSession.h:40:10: fatal error: 'ne_session.h' file not found
#include "ne_session.h"
Thanks for your help!
Regards,
Sébastien
[*]: it seems to come from the "root-config --dicttype" which does not
exist in ROOT 6.
Post by Philippe Canal
Hi Sebastien,
How is it not compatible? What failure do you see?
Philippe.
Post by Sébastien Gadrat
Hi again,
Well, actually the way I was compiling dictionaries with ROOT 5 does not
work with ROOT 6. I am trying to make my piece of code compatible with
both ROOT version. What is the simple way to do it ?
Thanks!
Regards,
Sébastien
Post by Sébastien Gadrat
Dear all,
Just forget my e-mail... There were a "stupid" mistake in the Makefile...
Sébastien
Post by Sébastien Gadrat
Dear ROOTers,
I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.
How can I tell ROOT where to find the external headers for dictionaries
compilation?
Thank you!
Regards,
Sébastien
--
Sébastien Gadrat
CMS Collaboration @LHC/CERN - CMS Tier-1 Contact Person
CNRS/IN2P3 Computing Center
Lyon/France
Phone: +33 (0)4 78 93 08 80
Philippe Canal
2014-10-07 17:57:09 UTC
Permalink
Hi Sebastien,

You can customize in your local .rootrc or in system.rootrc the key:

# Path used to find plugin macros.
# Paths are different for Unix and Windows. The example shows the defaults
# for all ROOT applications for either Unix or Windows.
Unix.*.Root.PluginPath: :$(ROOTSYS)/etc/plugins:
WinNT.*.Root.PluginPath: ;$(ROOTSYS)/etc/plugins;

By either replacing etc/plugins or adding new directories.

Cheers,
Philippe.
Post by Sébastien Gadrat
Hello Philippe,
And thanks for your help, I fixed the few errors I had.
$(ROOTSYS)/etc/root/plugins/TFile (it is a TFile plugin of course).
However I would like to put it in some other place (testing different
things, I want to keep the ROOT directory clean). What is the best and
easiest way to tell ROOT where to look for plugins?
Thanks again!
Cheers,
Sébastien
Post by Philippe Canal
Hi Sébastien,
Post by Sébastien Gadrat
First the ROOTCINT variable is not set [*].
Humm ... for backward compatibility we should indeed continue to
(deprecatedly) define it.
Post by Sébastien Gadrat
#include "ne_session.h"
this seems like of you headers. Were they previous hidden from CINT
(with a #ifndef __CINT__
or #ifndef __MAKECINT__) ...
I.e. this is not a ROOT header and rootcling can not guess where to
find it. You would need
to either hide it from rootcling (with #ifndef __ROOTCLING__) or you
would have to add the
same -I... that you add to your compilation line.
Cheers,
Philippe.
Post by Sébastien Gadrat
Hello Philippe,
Here is what I do. My Makefile links to ROOT_DIR/etc/Makefile.arch. Then
AllDict.$(SrcSuf): $(CLOUDSTOR_INC) LinkDef.h
which allows me to compile the dictionaries for any ROOT 5 version. The
files in the $(CLOUDSTOR_INC) variable depends on an external library,
but rootcint is able to pick them up and everything compiles smoothly.
I have also "freshly" installed ROOT v6.00.02, but this does not work
anymore. First the ROOTCINT variable is not set [*]. But if I set it by
"hand", then the external headers are not found, and I end up with this
rootcling -v4 -f AllDict.cxx -c THttpFile.h THttpSession.h ...
TCloudExtension.h LinkDef.h
./THttpSession.h:40:10: fatal error: 'ne_session.h' file not found
#include "ne_session.h"
Thanks for your help!
Regards,
Sébastien
[*]: it seems to come from the "root-config --dicttype" which does not
exist in ROOT 6.
Post by Philippe Canal
Hi Sebastien,
How is it not compatible? What failure do you see?
Philippe.
Post by Sébastien Gadrat
Hi again,
Well, actually the way I was compiling dictionaries with ROOT 5 does not
work with ROOT 6. I am trying to make my piece of code compatible with
both ROOT version. What is the simple way to do it ?
Thanks!
Regards,
Sébastien
Post by Sébastien Gadrat
Dear all,
Just forget my e-mail... There were a "stupid" mistake in the Makefile...
Sébastien
Post by Sébastien Gadrat
Dear ROOTers,
I am compiling a simple ROOT plug-in, which depends on an external
library. To compile it, I am using a simple Makefile which links to
ROOT_DIR/etc/Makefile.arch. The dictionaries compilation failed because
the include files of the external library are required, but not found.
How can I tell ROOT where to find the external headers for dictionaries
compilation?
Thank you!
Regards,
Sébastien
Continue reading on narkive:
Loading...