www.digitalmars.com         C & C++   DMDScript  

D.gnu - Instruct gdc to look for standard library in another directory

reply Johann <krani otomy.com> writes:
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
parent reply Iain Buclaw <ibuclaw gdcproject.org> writes:
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
parent reply Johann <krani otomy.com> writes:
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
parent reply Johann <krani otomy.com> writes:
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. ```
Jul 01 2023
parent Johann <krani otomy.com> writes:
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
Jul 08 2023