Thread overview
Instruct gdc to look for standard library in another directory
Jul 01, 2023
Johann
Jul 01, 2023
Iain Buclaw
Jul 01, 2023
Johann
Jul 01, 2023
Johann
Jul 08
Johann
July 01, 2023

I have both ldc and gdc install on my OpenSUSE tumbleweed machine.

Without ldc-runtime-devel, gdc is able to compile successfully.

binary    /usr/lib64/gcc/x86_64-suse-linux/13/d21
version   v2.103.0-rc.1

predefs   GNU D_Version2 LittleEndian GNU_DWARF2_Exceptions GNU_StackGrowsDown GNU_InlineAsm D_LP64 assert D_PreConditions D_PostConditions D_Invariants D_ModuleInfo D_Exceptions D_TypeInfo all X86_64 D_HardFloat Posix linux CRuntime_Glibc CppRuntime_Gcc
parse     app
importall app
import    object	(/usr/lib64/gcc/x86_64-suse-linux/13/include/d/object.d)


... rest omitted

However, after installing ldc-runtime-devel, gdc fails to compile a "hello world" because it tries to use the phobos library provided by ldc.

gdc installs its library at /usr/lib64/gcc/x86_64-suse-linux/13/include/d/
ldc installs its library at /usr/include/d

gdc -v source/app.d shows,

gcc version 13.1.1 20230522 [revision dd36656ada05731c069ecd5b1878380294fb1f3e] (SUSE Linux)
COLLECT_GCC_OPTIONS='-v' '-o' 'a.out' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
 /usr/lib64/gcc/x86_64-suse-linux/13/d21 source/app.d -quiet -dumpdir a- -dumpbase app.d -dumpbase-ext .d -mtune=generic -march=x86-64 -version -v -o /tmp/ccFpibdu.s
GNU D (SUSE Linux) version 13.1.1 20230522 [revision dd36656ada05731c069ecd5b1878380294fb1f3e] (x86_64-suse-linux)
	compiled by GNU C version 13.1.1 20230522 [revision dd36656ada05731c069ecd5b1878380294fb1f3e], GMP version 6.2.1, MPFR version 4.2.0-p9, MPC version 1.3.1, isl version isl-0.26-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
binary    /usr/lib64/gcc/x86_64-suse-linux/13/d21
version   v2.103.0-rc.1

predefs   GNU D_Version2 LittleEndian GNU_DWARF2_Exceptions GNU_StackGrowsDown GNU_InlineAsm D_LP64 assert D_PreConditions D_PostConditions D_Invariants D_ModuleInfo D_Exceptions D_TypeInfo all X86_64 D_HardFloat Posix linux CRuntime_Glibc CppRuntime_Gcc
parse     app
importall app
import    object	(/usr/include/d/object.d)
import    core.attribute	(/usr/include/d/core/attribute.d)
import    gcc.attributes	(/usr/lib64/gcc/x86_64-suse-linux/13/include/d/gcc/attributes.d)
import    core.internal.hash	(/usr/include/d/core/internal/hash.d)
import    core.internal.traits	(/usr/include/d/core/internal/traits.d)
import    core.internal.entrypoint	(/usr/include/d/core/internal/entrypoint.d)
import    core.internal.array.appending	(/usr/include/d/core/internal/array/appending.d)
import    core.internal.array.comparison	(/usr/include/d/core/internal/array/comparison.d)
import    core.internal.array.equality	(/usr/include/d/core/internal/array/equality.d)
import    core.internal.array.casting	(/usr/include/d/core/internal/array/casting.d)
import    core.internal.array.concatenation	(/usr/include/d/core/internal/array/concatenation.d)
import    core.internal.array.construction	(/usr/include/d/core/internal/array/construction.d)
import    core.internal.array.arrayassign	(/usr/include/d/core/internal/array/arrayassign.d)
import    core.internal.array.capacity	(/usr/include/d/core/internal/array/capacity.d)
import    core.internal.dassert	(/usr/include/d/core/internal/dassert.d)
import    core.atomic	(/usr/include/d/core/atomic.d)
import    core.internal.attributes	(/usr/include/d/core/internal/attributes.d)
import    core.internal.atomic	(/usr/include/d/core/internal/atomic.d)
import    gcc.builtins	(/usr/lib64/gcc/x86_64-suse-linux/13/include/d/gcc/builtins.d)
import    gcc.config	(/usr/lib64/gcc/x86_64-suse-linux/13/include/d/gcc/config.d)
import    core.internal.destruction	(/usr/include/d/core/internal/destruction.d)
import    core.internal.moving	(/usr/include/d/core/internal/moving.d)
import    core.internal.postblit	(/usr/include/d/core/internal/postblit.d)
import    core.internal.switch_	(/usr/include/d/core/internal/switch_.d)
import    core.lifetime	(/usr/include/d/core/lifetime.d)
import    core.builtins	(/usr/include/d/core/builtins.d)
import    std.stdio	(/usr/include/d/std/stdio.d)
import    core.stdc.stddef	(/usr/include/d/core/stdc/stddef.d)
import    std.algorithm.mutation	(/usr/include/d/std/algorithm/mutation.d)
import    std.traits	(/usr/include/d/std/traits.d)
import    std.meta	(/usr/include/d/std/meta.d)
import    std.range.primitives	(/usr/include/d/std/range/primitives.d)
import    std.typecons	(/usr/include/d/std/typecons.d)
import    std.format.spec	(/usr/include/d/std/format/spec.d)
import    std.format.write	(/usr/include/d/std/format/write.d)
import    std.format.internal.write	(/usr/include/d/std/format/internal/write.d)
import    std.internal.attributes	(/usr/include/d/std/internal/attributes.d)
import    std.range	(/usr/include/d/std/range/package.d)
import    std.array	(/usr/include/d/std/array.d)
import    std.functional	(/usr/include/d/std/functional.d)
import    std.conv	(/usr/include/d/std/conv.d)
import    std.ascii	(/usr/include/d/std/ascii.d)
import    std.range.interfaces	(/usr/include/d/std/range/interfaces.d)
import    core.stdc.stdio	(/usr/include/d/core/stdc/stdio.d)
import    core.stdc.stdint	(/usr/include/d/core/stdc/stdint.d)
import    core.stdc.config	(/usr/include/d/core/stdc/config.d)
import    core.stdc.signal	(/usr/include/d/core/stdc/signal.d)
import    core.stdc.wchar_	(/usr/include/d/core/stdc/wchar_.d)
import    core.stdc.stdarg	(/usr/include/d/core/stdc/stdarg.d)
import    core.stdc.time	(/usr/include/d/core/stdc/time.d)
import    core.sys.posix.stdc.time	(/usr/include/d/core/sys/posix/stdc/time.d)
import    core.sys.posix.sys.types	(/usr/include/d/core/sys/posix/sys/types.d)
import    core.sys.posix.config	(/usr/include/d/core/sys/posix/config.d)
import    core.sys.posix.stdio	(/usr/include/d/core/sys/posix/stdio.d)
semantic  app
import    std.exception	(/usr/include/d/std/exception.d)
import    core.stdc.errno	(/usr/include/d/core/stdc/errno.d)
entry     main	source/app.d
semantic2 app
semantic3 app
import    std.utf	(/usr/include/d/std/utf.d)
import    core.exception	(/usr/include/d/core/exception.d)
import    core.internal.string	(/usr/include/d/core/internal/string.d)
import    std.algorithm.comparison	(/usr/include/d/std/algorithm/comparison.d)
import    core.stdc.string	(/usr/include/d/core/stdc/string.d)
/usr/include/d/std/stdio.d:4322:18: error: none of the overloads of template ‘std.stdio.File.LockingTextWriter.put’ are callable using argument types ‘!()(string)’
 4322 |             w.put(args[0]);
      |                  ^
/usr/include/d/std/stdio.d:3248:14: note: Candidates are: ‘put(A)(scope A writeme)’
     with `A = string`
  whose parameters have the following constraints:
  `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
`      > isSomeChar!(ElementType!A)
        or:
      > is(ElementType!A : const(ubyte))
  - isInputRange!A
  - !isInfinite!A
`  `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
 3248 |         void put(A)(scope A writeme)
      |              ^
/usr/include/d/std/stdio.d:3278:14: note:                 ‘put(C)(scope C c)’
     with `C = string`
  whose parameters have the following constraints:
  `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
`  > isSomeChar!C
    or:
  > is(C : const(ubyte))
`  `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
 3278 |         void put(C)(scope C c) @safe if (isSomeChar!C || is(C : const(ubyte)))
      |              ^
not satisfied constraints are marked with ‘>’
/usr/include/d/std/stdio.d:3299:56: error: none of the overloads of template ‘std.utf.decodeFront’ are callable using argument types ‘!()(char[])’
 3299 |                         immutable dchar d = decodeFront(str);
      |                                                        ^
/usr/include/d/std/utf.d:1245:7: note: Candidates are: ‘decodeFront(Flag useReplacementDchar = No.useReplacementDchar, S)(ref S str, out size_t numCodeUnits)’
 1245 | dchar decodeFront(UseReplacementDchar useReplacementDchar = No.useReplacementDchar, S)(
      |       ^
/usr/include/d/std/utf.d:1285:7: note:                 ‘decodeFront(Flag useReplacementDchar = No.useReplacementDchar, S)(ref scope S str, out size_t numCodeUnits)’
 1285 | dchar decodeFront(UseReplacementDchar useReplacementDchar = No.useReplacementDchar, S)(
      |       ^
/usr/include/d/std/utf.d:1314:7: note:                 ‘decodeFront(Flag useReplacementDchar = No.useReplacementDchar, S)(ref S str)’
     with `useReplacementDchar = Flag.no,
       S = char[]`
  whose parameters have the following constraints:
  `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
`  > isInputRange!S
  - isSomeChar!(ElementType!S)
`  `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
 1314 | dchar decodeFront(UseReplacementDchar useReplacementDchar = No.useReplacementDchar, S)(ref S str)
      |       ^
not satisfied constraints are marked with ‘>’
/usr/include/d/std/utf.d:2311:15: error: ‘object._d_newclassT’ not found. The current runtime does not support new class, or the runtime is corrupt.
 2311 |         throw new UTFException(msg).setSequence(c);
      |               ^
/usr/include/d/std/utf.d:2514:13: error: template instance ‘std.utf._utfException!Flag.no’ error instantiating
 2514 |         c = _utfException!useReplacementDchar("Encoding an invalid code point in UTF-32", c);
      |             ^
/usr/include/d/std/stdio.d:3301:48: note: instantiated from here: ‘encode!Flag.no’
 3301 |                         immutable size = encode(wbuf, d);
      |                                                ^
/usr/include/d/std/stdio.d:4324:14: note: instantiated from here: ‘put!char’
 4324 |         w.put('\n');
      |              ^
source/app.d:5:16: note: instantiated from here: ‘writeln!string’
    5 |         writeln("Edit source/app.d to start your project.");
      |                ^
/usr/include/d/core/internal/entrypoint.d:41:17: error: unrecognized ‘pragma(LDC_profile_instr)’
   41 |                 pragma(LDC_profile_instr, false);
      |                 ^
source/app.d:3:6: note: parent scope from here: ‘mixin _d_cmain!()’
    3 | void main()
      |      ^

How may I fix it? I tried to use "-I" and "-B" option, but to no avail.

July 01, 2023

On Saturday, 1 July 2023 at 06:53:02 UTC, Johann wrote:

>

I have both ldc and gdc install on my OpenSUSE tumbleweed machine.

Withoutldc-runtime-devel, gdc` is able to compile
successfully.

[--snip--]

>

How may I fix it? I tried to use "-I" and "-B" option, but to no avail.

Looks like ldc might be too old?

Regardless, I'd ask the package maintainers why they are putting compiler-dependent sources in /usr/include/d.

Actually, just any D sources in /usr/include has always seemed dubious to me.

i.e: On my system...

  • Ada "includes" are installed into /usr/share/ada/adainclude
  • Go "includes" are installed into /usr/share/gocode/src
  • Rust "includes" are installed into /usr/share/cargo/registry
  • Haskell "includes" are installed into /usr/lib/haskell-packages
  • Ocaml "includes" are installed into /usr/lib/ocaml

Is it too much to ask downstream package maintainers to politely use /usr/share/dlang/{ldc,dmd} ? :-)

July 01, 2023

On Saturday, 1 July 2023 at 10:18:43 UTC, Iain Buclaw wrote:

>

Is it too much to ask downstream package maintainers to politely use /usr/share/dlang/{ldc,dmd} ? :-)

Thanks for your help, Iain. I am going to report a bug to the distro maintainers then.

July 01, 2023

On Saturday, 1 July 2023 at 15:36:55 UTC, Johann wrote:

>

On Saturday, 1 July 2023 at 10:18:43 UTC, Iain Buclaw wrote:

>

Is it too much to ask downstream package maintainers to politely use /usr/share/dlang/{ldc,dmd} ? :-)

Thanks for your help, Iain. I am going to report a bug to the distro maintainers then.

Meanwhile, I found out the problem can be worked around by using -nostdinc option.

-nostdinc
    Do not search the standard system directories for D source and interface files.  Only the directories that have been specified with -I options (and the directory of the current file, if appropriate) are searched.
July 08

On Saturday, 1 July 2023 at 16:53:10 UTC, Johann wrote:

>

On Saturday, 1 July 2023 at 15:36:55 UTC, Johann wrote:

>

On Saturday, 1 July 2023 at 10:18:43 UTC, Iain Buclaw wrote:

>

Is it too much to ask downstream package maintainers to politely use /usr/share/dlang/{ldc,dmd} ? :-)

Thanks for your help, Iain. I am going to report a bug to the distro maintainers then.

Meanwhile, I found out the problem can be worked around by using -nostdinc option.

-nostdinc
    Do not search the standard system directories for D source and interface files.  Only the directories that have been specified with -I options (and the directory of the current file, if appropriate) are searched.

Problem is now fixed by ldc openSUSE package maintainer.

https://bugzilla.opensuse.org/show_bug.cgi?id=1212913