Skip to content

tao_idl mangles #include's by inserting absolute paths after relative prefixes #2049

Open
@alexchandel

Description

@alexchandel

Version

ACE 7.0.11

Host machine and operating system

macOS 12.6.3

Compiler name and version (including patch level)

Apple clang version 14.0.0 (clang-1400.0.29.202)

The $ACE_ROOT/ace/config.h file

Basically just "ace/config-macosx-mojave.h"
#ifndef ACE_CONFIG_CUSTOM_H
#define ACE_CONFIG_CUSTOM_H

#ifndef GNUC
#define GNUC 4
#endif
#ifndef GNUC_MINOR
#define GNUC_MINOR 2
#endif

#define ACE_HAS_STANDARD_CPP_LIBRARY 1

#include "ace/config-macosx-mojave.h"

#endif // ACE_CONFIG_CUSTOM_H

The $ACE_ROOT/include/makeinclude/platform_macros.GNU file

Basically just include $(ACE_ROOT)/include/makeinclude/platform_macosx_mojave.GNU
debug		= 0
inline		= 1
optimize	= 1
static_libs	= 1
shared_libs	= 1
ssl			= 0
buildbits	= 64

OCFLAGS += -Oz -Wno-deprecated-declarations
OCCFLAGS += -Oz -Wno-deprecated-declarations
CFLAGS += -Wno-deprecated-declarations
CCFLAGS += -Wno-deprecated-declarations
LDFLAGS +=

include $(ACE_ROOT)/include/makeinclude/platform_macosx_monterey.GNU

Contents of $ACE_ROOT/bin/MakeProjectCreator/config/default.features

Unmodified.

AREA/CLASS/EXAMPLE AFFECTED:

TAO_Core_idl generates bad anyop header files, meaning projects like AnyTypeCode and Portable Server fail to build.

The problem effects:

TAO cannot be built.

Synopsis / Description

Invoking tao_idl with absolute paths like below causes the generated anyop header files to include mangled/illegal paths when accessing the stub header.

cd /Users/dev/Downloads/Test/ACE_wrappers/TAO/tao && /usr/local/Cellar/cmake/3.25.2/bin/cmake -E env TAO_ROOT=/Users/dev/Downloads/Test/ACE_wrappers/TAO "LD_LIBRARY_PATH=/Users/dev/Downloads/Test/ACE_wrappers/lib" /Users/dev/Downloads/Test/ACE_wrappers/bin/tao_idl -g /Users/dev/Downloads/Test/ACE_wrappers/bin/ace_gperf -Sp -Sd -Sp -Sd -Sg -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h --idl-version 4 -as --unknown-annotations ignore -I/Users/dev/Downloads/Test/ACE_wrappers/TAO -I/Users/dev/Downloads/Test/ACE_wrappers/TAO/tao -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h -I .. -Wb,versioning_begin=TAO_BEGIN_VERSIONED_NAMESPACE_DECL -Wb,versioning_end=TAO_END_VERSIONED_NAMESPACE_DECL -SS -Sorb -GA -Gp -Gd -oA AnyTypeCode -Wb,export_macro=TAO_Export -Wb,export_include=tao/TAO_Export.h -Wb,anyop_export_macro=TAO_AnyTypeCode_Export -Wb,anyop_export_include=tao/AnyTypeCode/TAO_AnyTypeCode_Export.h -Sci -Gse -Gata -o /Users/dev/Downloads/Test/ACE_wrappers/TAO/tao -oS /Users/dev/Downloads/Test/ACE_wrappers/TAO/tao /Users/dev/Downloads/Test/ACE_wrappers/TAO/tao/BooleanSeq.pidl

BooleanSeqA.h is generated with these lines:

#include /**/ "ace/pre.h"

#include /**/ "tao/AnyTypeCode/TAO_AnyTypeCode_Export.h"
#include "tao/AnyTypeCode/Any.h"

#include "tao//Users/dev/Downloads/Test/ACE_wrappers/TAO/tao/BooleanSeqC.h"

Notice the absolute path to BooleanSeqC.h (constructed from the -o opt) is illegally appended to tao/. Notice that only the reference to the stub header is affected.

The problem does not affect BooleanSeqC.cpp or BooleanSeqA.cpp, which only include their neighbors (e.g. #include "BooleanSeqC.h" and #include "BooleanSeqA.h"). However I suspect tao_idl's code will produce this error whenever any generated file includes a generated header for which tao_idl was passed an absolute path.

Repeat by

See above. This happens to BooleanSeqA.h whenever anything is passed to -o, even -o ..

Sample fix/ workaround

Only not passing -o causes tao_idl to emit a normal include #include "tao/BooleanSeqC.h".

Instead of mangled paths, if both files lie in TAO_ROOT or something, tao_idl should resolve the absolute path into a relative path, and just emit #include "tao/BooleanSeqC.h". Or just always emit that, and rely on the consumer to set up include directories properly.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions