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

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

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

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

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