Skip to content
This repository has been archived by the owner on Jul 4, 2023. It is now read-only.

Unable to install open-scene-graph: missing dae.h for collada-dom #43536

Closed
nextstopsun opened this issue Sep 3, 2015 · 14 comments
Closed

Unable to install open-scene-graph: missing dae.h for collada-dom #43536

nextstopsun opened this issue Sep 3, 2015 · 14 comments

Comments

@nextstopsun
Copy link

Trying to install open-scene-graph with:
brew install --with-collada-dom --with-docs --with-ffmpeg --with-gdal --with-jasper --with-librsvg --with-qt open-scene-graph

Make fails on
[ 95%] Built target osgdb_ive make: *** [all] Error 2

My brew logs are here:
https://gist.github.com/b55823b91e605648ccfc

@dunn
Copy link
Contributor

dunn commented Sep 3, 2015

Looks like this is causing the failure:

In file included from /tmp/open-scene-graph20150903-1074-ipfyil/OpenSceneGraph-3.4.0/src/osgPlugins/dae/daeReader.cpp:14:
/tmp/open-scene-graph20150903-1074-ipfyil/OpenSceneGraph-3.4.0/src/osgPlugins/dae/daeReader.h:19:10: fatal error: 'dae.h' file not found
#include <dae.h>
         ^

@nextstopsun
Copy link
Author

dae.h is a header file from collada-dom library
I'm using brewed collada dom:

brew info collada-dom
collada-dom: stable 2.4.0
C++ library for loading and saving COLLADA data
http://www.collada.org/mediawiki/index.php/Portal:COLLADA_DOM
/usr/local/Cellar/collada-dom/2.4.0 (462 files, 13M) *
  Built from source
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/collada-dom.rb

So I have this file in my filesystem

locate dae.h
/usr/local/Cellar/collada-dom/2.4.0/include/collada-dom2.4/dae.h

Maybe it should symlink to /usr/local/include/ or smth?

@dunn
Copy link
Contributor

dunn commented Sep 3, 2015

There should be a flag we can pass to CMake to let it know where to find that header; if you want to poke around that'd be great, otherwise I'll give it a shot when I have a chance.

@nextstopsun
Copy link
Author

Hmm...
I thought this line in the formula is passing the correct flag:

if build.with? "collada-dom"
      args << "-DCOLLADA_INCLUDE_DIR=#{Formula["collada-dom"].opt_include}/collada-dom"
    end

@dunn Can you give me a clue?

@dunn
Copy link
Contributor

dunn commented Sep 3, 2015

Oh, the problem is the include directory is named "collada-dom2.4" instead of "collada-dom". I guess we'll have to change that manually for each minor version bump.

@nextstopsun
Copy link
Author

Thanks, @dunn hardcoding collada-dom2.4 in formula did the trick.
But is there a proper way to point out to installed version of the lib?

@DomT4
Copy link
Member

DomT4 commented Oct 19, 2015

Was this resolved?

@dunn
Copy link
Contributor

dunn commented Oct 20, 2015

Woops, I guess not.

One way to avoid hardcoding the collada version number into the open-scene-graph formula would be to do something silly like:

if build.with? "collada-dom"
  collada_dir = `ls #{Formula["collada-dom"].opt_include}/collada-dom*`
  args << "-DCOLLADA_INCLUDE_DIR=#{collada_dir}

I don't know which is worse.

@apjanke apjanke changed the title Unable to install open-scene-graph Unable to install open-scene-graph: missing dae.h for collada-dom Nov 26, 2015
@apjanke
Copy link
Contributor

apjanke commented Nov 26, 2015

This sounds like an upstream bug in OSG's build process.

By default, collada-dom installs its headers in major.minor versioned directories. The OpenSceneGraph build system has custom code in CMakeModules/FindCollada.cmake to locate the Collada headers. It doesn't look for versioned directories. And the #include directives in its code don't qualify the file names.

FIND_PATH(COLLADA_INCLUDE_DIR dae.h
    ${COLLADA_DOM_ROOT}/include
    $ENV{COLLADA_DIR}/include
    $ENV{COLLADA_DIR}
    ~/Library/Frameworks
    /Library/Frameworks
    /opt/local/Library/Frameworks #macports
    /usr/local/include
    /usr/local/include/colladadom
    /usr/local/include/collada-dom
    /opt/local/include/collada-dom
    /usr/include/
    /usr/include/colladadom
    /usr/include/collada-dom
    /sw/include # Fink
    /opt/local/include # DarwinPorts
    /opt/csw/include # Blastwave
    /opt/include
    /usr/freeware/include
    ${ACTUAL_3DPARTY_DIR}/include
)

So, it looks like OpenSceneGraph can't compile against a default installation of collada-dom; it expects a custom one that has removed the version from the directory.

It's kind of unusual for software to qualify its include dirs by minor version by default. And since OSG is the only formula in Homebrew using collada-dom, I don't know how software usually handles it. Though having to change your code on every minor version bump is really inconvenient, so I suspect they do something like this where they don't qualify the header paths in their #defines, and just locate the Collada-dom installation's include dir to put on the -I path.

We could change the collada-dom installation to not have a version-qualified installation directory. Or to symlink a include/collada-dom -> collada-dom2.4 during the installation process. If OSG's CMake stuff is right, that's what DarwinPorts and Fink did. Then OSG's default build logic would work.

Not sure what the official Right Way to do it is, or if there even is one. The Collada doco on the OSG Wiki is out of date, and the library client guide on the Collada DOM Wiki also looks out of date, and doesn't match how OSG is using it.

I'm inclined to just include an unqualified include/collada-dom link or rename in the collada-dom formula, since we don't support side-by-side installation of multiple versions, and it seems to be what the client program wants.

@apjanke
Copy link
Contributor

apjanke commented Nov 26, 2015

On second thought, @dunn's hack seems like a better approach, since it doesn't require any patching or change collada-dom's behavior away from the upstream default. Since we only have one formula using collada-dom, and I couldn't find any other such clients with a little googling, seems safest to restrict the change to the one failing client.

Made a PR for it: #46380. Tests out okay for me on 10.9.5 doing brew install --build-from-source open-scene-graph --with-collada-dom.

@apjanke
Copy link
Contributor

apjanke commented Nov 26, 2015

Oops. The test I ran for #46380 was wrong. Now it is failing with this.

[ 87%] Building CXX object src/osgPlugins/dae/CMakeFiles/osgdb_dae.dir/daeReader.cpp.o
cd /tmp/open-scene-graph20151126-78498-1ygkfdp/OpenSceneGraph-3.4.0/build/src/osgPlugins/dae && /usr/local/Library/ENV/4.3/clang++   -DCOLLADA_DOM_SUPPORT141 -DNO_BOOST -Dosgdb_dae_EXPORTS -I/tmp/open-scene-graph20151126-78498-1ygkfdp/OpenSceneGraph-3.4.0/include -F/Applications/Xcode-6.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks -I/tmp/open-scene-graph20151126-78498-1ygkfdp/OpenSceneGraph-3.4.0/build/include -I/usr/local/opt/collada-dom/include/collada-dom2.4 -I/1.4  -std=c++11 -stdlib=libc++  -Wno-conversion -arch x86_64 -isysroot /Applications/Xcode-6.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fPIC   -o CMakeFiles/osgdb_dae.dir/daeReader.cpp.o -c /tmp/open-scene-graph20151126-78498-1ygkfdp/OpenSceneGraph-3.4.0/src/osgPlugins/dae/daeReader.cpp
In file included from /tmp/open-scene-graph20151126-78498-1ygkfdp/OpenSceneGraph-3.4.0/src/osgPlugins/dae/daeReader.cpp:14:
/tmp/open-scene-graph20151126-78498-1ygkfdp/OpenSceneGraph-3.4.0/src/osgPlugins/dae/daeReader.h:22:10: fatal error: 'dom/domCommon_color_or_texture_type.h' file not found
#include <dom/domCommon_color_or_texture_type.h>
         ^

It looks like this is due to it not picking up the 1.4 subdirectory (for DOM v 1.4) under include/collada-dom2.4. That -I/usr/local/opt/collada-dom/include/collada-dom2.4 -I/1.4 should be -I/usr/local/opt/collada-dom/include/collada-dom2.4 -I/usr/local/opt/collada-dom/include/collada-dom2.4/1.4.

@apjanke
Copy link
Contributor

apjanke commented Nov 26, 2015

I submitted an upstream issue: openscenegraph/OpenSceneGraph#48.

@apjanke
Copy link
Contributor

apjanke commented Nov 26, 2015

Hmm. Since this directory location is more a property of the collada-dom installation, might it make sense to add a special versioned_include_dir method to collada-dom.rb, which will tell you where this version-qualified directory ended up? Then it would be obvious when it needed to be adjusted if the collada-dom version was bumped, since it's in the same file.

@MikeMcQuaid
Copy link
Member

Sounds like this was fixed in #46776. Otherwise: we'll accept PRs for this but we're not actively working on it at this time.

@Homebrew Homebrew locked and limited conversation to collaborators Aug 18, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants