D.gnu - Instruct gdc to look for standard library in another directory
- Johann (241/241) Jun 30 2023 I have both `ldc` and `gdc` install on my OpenSUSE tumbleweed
- Iain Buclaw (17/23) Jul 01 2023 Looks like ldc [might be too
I have both `ldc` and `gdc` install on my OpenSUSE tumbleweed machine. Without `ldc-runtime-devel`, `gdc` is able to compile successfully. ```bash 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, ```bash 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.
Jun 30 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. ` Without `ldc-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](https://packagehub.suse.com/packages/ldc/1_29_0-bp155_3_26/)? 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}` ? :-)
Jul 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.
Jul 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: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. ```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.
Jul 01 2023
On Saturday, 1 July 2023 at 16:53:10 UTC, Johann wrote:On Saturday, 1 July 2023 at 15:36:55 UTC, Johann wrote:Problem is now fixed by ldc openSUSE package maintainer. https://bugzilla.opensuse.org/show_bug.cgi?id=1212913On Saturday, 1 July 2023 at 10:18:43 UTC, Iain Buclaw wrote: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. ```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.
Jul 08 2023