[Info-vax] C compiler snag
John Reagan
xyzzy1959 at gmail.com
Fri May 21 10:34:49 EDT 2021
On Friday, May 21, 2021 at 9:25:44 AM UTC-4, John E. Malmberg wrote:
> On 5/19/2021 9:06 AM, John Reagan wrote:
> > On Wednesday, May 19, 2021 at 8:50:32 AM UTC-4, John E. Malmberg wrote:
> >> On 5/19/2021 4:51 AM, Richard Levitte wrote:
> >>> Hey folks,
> >>>
> >>> it's been long since I've been present here... been all busy with
> >>> OpenSSL, not much time for something else.
> >> <snip>
> >>>
> >>> -----
> >>> $ cc humpf.c
> >>>
> >>> #include "../something.h"
> >>> .^
> >>> %CC-F-NOINCLFILEF, Cannot find file "../something.h" specified in #include directive.
> >>> at line number 1 in file USER:[LEVITTE.TEST.CC-INCL-2.INCL]h.h;1
> >>> -----
> >>>
> >>> So my question is, is there any trick that I can do with the compiler
> >>> to make this go through without error? i would rather not have to
> >>> restructure the inclusion if I can.
> >> Only solution that I have found is to run a pre-build script to find and
> >> re-edit the source code to change "../" to path or a logical name.
> >>
> >> I don't thing that is ever going to get fixed in the Alpha/IA64 compilers.
> >>
> >> Regards,
> >> -John
> > I doubt the compilers are at fault. At somepoint, we give that filespec to the CRTL's open/fopen.
> >
> > Relative filespecs are controlled by various DECC$ feature logicals <insert ugly comment here>.
> > DECC$POSIX_COMPLIANT_PATHNAMES might help but setting that the DCL prompt before the
> > compilation might be too big of a hammer as some code <insert 2nd ugly comment here>.
> >
> > I have the same issue with some of the files in LLVM that use relative filespecs.
> The C compiler seems to isolate it self, and ignores most of the DECC$
> feature logical settings that I have tried.
>
> I will have to add some tests to gnulib-assist to see if I can duplicate
> the exact problem, but for that I need to know what exactly the
> compilers are passing to the CRTL.
>
> By itself, the CRTL seems to handle most of the the "../" cases for path
> to a filename.
>
> The compiler however is doing some extra stuff with processing the
> directory found in a header file depending on the options set for the
> compiler on the command line (And possibly #pragmas)
>
> And I have demonstrated that the Compiler handling of filenames is
> different than the CRTL in that the <net/xxxx.h> headers in the text
> library can not be accessed by the compiler if decnet is running.
>
> The CRTL does does not have a issue with converting "net/xxx.h" to
> [.net]xxx.h for finding files. Only the C Compiler treats "net/xxx.h"
> as net:xxx.h and then fails the compile, very similar to the ".." failure.
>
> The behavior that I see:
>
> If the directory is present in the specification and is a logical name,
> that logical name is used. CRTL feature settings do not appear to
> affect this for the C compiler, but do affect it for user programs.
>
> Depending on the compiler settings, if a directory is present in the
> specification and exists in the source code, then the header will be
> used from that directory instead of the OpenVMS text libraries, except
> if the directory is specified as "..".
>
> The case of ".." is a case where this does not work, and I can not
> reproduce this failure with just test programs on the CRTL, regardless
> of the feature settings.
>
> If the directory is present and is not ".." and does not exist, it
> discards it and uses the OpenVMS text libraries for the headers. This
> has turned out to be a very useful feature to insure that my code
> includes the OpenVMS header file instead of a file with the same name
> used by a project. (Pretty common in open source porting)
>
> Either way the current behavior of the compiler is incorrect. If it is
> in the CRTL, then it is bug and should get fixed there, otherwise it
> should get fixed or worked around in the compiler, just like the
> handling of the decnet NET: device needs to get fixed in the compiler.
>
> Regards,
> -John
I'll do more research but there is nothing of your description that matches what
I know. There is some GEM code mixed in as well. I don't see the C compiler (or
the C++) compiler doing anything to avoid DECC$ logicals. For example, turn on
DECC$POSIX_COMPLIANT_PATHNAMES and watch the compiler not able to find
.TLB files, etc.
More information about the Info-vax
mailing list