Thread overview
Can't make use of any headers
Jul 06, 2017
jallersma
Jul 06, 2017
Mike Parker
Jul 06, 2017
Johannes Pfau
Jul 07, 2017
jallersma
Jul 07, 2017
jallersma
July 06, 2017
Perhaps I have a bit of a noob question, but how come I cannot use any of the GTKd headers on GCD? On DMD there's no header that works. I tried to use dub to install the GTKD libraries, but without any luck. Everytime I try to compile the libraries, I get:

$ dub
generated/gtkd/gtkd/Implement.d:24:8: error: module meta is in file 'std/meta.d' which cannot be read
 import std.meta;
        ^
import path[0] = /usr/lib/gcc/x86_64-linux-gnu/5/include/d
import path[1] = /home/name/Downloads/src
import path[2] = /home/name/Downloads/generated/gstreamer
import path[3] = /home/name/Downloads/generated/gtkd
import path[4] = /home/name/Downloads/generated/gtkdgl
import path[5] = /home/name/Downloads/generated/peas
import path[6] = /home/name/Downloads/generated/sourceview
import path[7] = /home/name/Downloads/generated/vte
gdc failed with exit code 1.



Using gtk in a random *.d file I get:

$ sudo gdc main.d -o main
main.d:1:8: error: module MainWindow is in file 'gtk/MainWindow.d' which cannot be read
 import gtk.MainWindow, gtk.Box, gtk.Main;
        ^
import path[0] = /usr/lib/gcc/x86_64-linux-gnu/5/include/d

July 06, 2017
On Thursday, 6 July 2017 at 14:26:08 UTC, jallersma wrote:
> Perhaps I have a bit of a noob question, but how come I cannot use any of the GTKd headers on GCD? On DMD there's no header that works. I tried to use dub to install the GTKD libraries, but without any luck. Everytime I try to compile the libraries, I get:

dub doesn't "install" anything. It puts packages in a cache in your home directory so that when you build a project using a DUB configuration it can find them. The idea is that you don't even need to download such libraries -- add them as a dependency to your project's dub.json or dub.sdl configuration and running `dub build` or `dub run` will download the dependencies if they aren't already in the cache [1].

If you don't want to use dub to manage your project, then it's best to use `dub fetch --cache=local libfoo` to pull the libfoo package down somewhere outside of the cache. I have instructions on how to do that with the Derelict packages at [2], but they apply to any dub-managed library. You'll just need to specify the import path to the compiler and the library path to the linker when you build (or copy them to your system paths manually).

[1] https://code.dlang.org/getting_started
[2] http://derelictorg.github.io/building/without-dub/#fetching-packages-with-dub
July 07, 2017
Am Thu, 06 Jul 2017 14:26:08 +0000
schrieb jallersma <janallersma@gmail.com>:

> Perhaps I have a bit of a noob question, but how come I cannot use any of the GTKd headers on GCD? On DMD there's no header that works. I tried to use dub to install the GTKD libraries, but without any luck. Everytime I try to compile the libraries, I get:
> 
> $ dub
> generated/gtkd/gtkd/Implement.d:24:8: error: module meta is in
> file 'std/meta.d' which cannot be read
>   import std.meta;
>          ^
> import path[0] = /usr/lib/gcc/x86_64-linux-gnu/5/include/d
> import path[1] = /home/name/Downloads/src
> import path[2] = /home/name/Downloads/generated/gstreamer
> import path[3] = /home/name/Downloads/generated/gtkd
> import path[4] = /home/name/Downloads/generated/gtkdgl
> import path[5] = /home/name/Downloads/generated/peas
> import path[6] = /home/name/Downloads/generated/sourceview
> import path[7] = /home/name/Downloads/generated/vte
> gdc failed with exit code 1.

This means gtkD want to use the std.meta module and GDC can't find the source code for this file. Where did you get GDC from? I guess from debian/ubuntu packages? Then your GDC version is simply to old, versions from gdcproject.org/downloads should provide std.meta: https://docarchives.dlang.io/v2.068.0/phobos/std_meta.html

However, I'm can't guarantee gtkD will work with the releases from gdcproject.org as these are actually out of date as well ;-)

-- Johannes

July 07, 2017
Thanks for the reply Mike.
It clarifies how dub works. I tried to let dub handle the dependencies. Unfortunately, with no luck. The package is known to dub ('gui' is a package created by me):

$ dub list
Packages present in the system and known to dub:
  gui ~master: /home/name/repo/addr/code/gui/
  gtk-d 3.6.5: /home/name/.dub/packages/gtk-d-3.6.5/
  gtk-d:gtkd 3.6.5: /home/name/.dub/packages/gtk-d-3.6.5/
  gtk-d:gtkdgl 3.6.5: /home/name/.dub/packages/gtk-d-3.6.5/
  gtk-d:sv 3.6.5: /home/name/.dub/packages/gtk-d-3.6.5/
  gtk-d:gstreamer 3.6.5: /home/name/.dub/packages/gtk-d-3.6.5/
  gtk-d:vte 3.6.5: /home/name/.dub/packages/gtk-d-3.6.5/
  gtk-d:peas 3.6.5: /home/name/.dub/packages/gtk-d-3.6.5/

But I get errors though:

$ sudo dub build gui
Building package gui in /home/name/repo/addr/code/gui/
Performing "debug" build using gdc for x86_64.
gui ~master: building configuration "application"...
source/main.d:1:8: error: module MainWindow is in file 'gtk/MainWindow.d' which cannot be read
 import gtk.MainWindow, gtk.Box, gtk.Main;
        ^
import path[0] = /usr/lib/gcc/x86_64-linux-gnu/5/include/d
import path[1] = /home/name/repo/addr/code/gui/source
gdc failed with exit code 1.


After some trail and error, I thought of a solution: build gtkd by myself using it's repo. Running 'sudo make' informed me of something odd:

$ sudo make
gdc -O2 -Igenerated/gtkd -c generated/gtkd/gtkd/Implement.d -o generated/gtkd/gtkd/Implement.o
generated/gtkd/gtkd/Implement.d:24:8: error: module meta is in file 'std/meta.d' which cannot be read
 import std.meta;
        ^
import path[0] = /usr/lib/gcc/x86_64-linux-gnu/5/include/d
import path[1] = /home/name/repo/GtkD/generated/gtkd
GNUmakefile:228: recept voor doel 'generated/gtkd/gtkd/Implement.o' is mislukt
make: *** [generated/gtkd/gtkd/Implement.o] Fout 1


Going through my dir, meta.d is missing indeed:

$ ls /usr/lib/gcc/x86_64-linux-gnu/5/include/d/std
algorithm      csv.d         math.d         socket.d        uni.d
array.d        datetime.d    mathspecial.d  socketstream.d  uri.d
ascii.d        demangle.d    mmfile.d       stdint.d        utf.d
base64.d       digest        net            stdiobase.d     uuid.d
bigint.d       encoding.d    numeric.d      stdio.d         variant.d
bitmanip.d     exception.d   outbuffer.d    stream.d        windows
c              experimental  parallelism.d  string.d        xml.d
compiler.d     file.d        path.d         syserror.d      zip.d
complex.d      format.d      process.d      system.d        zlib.d
concurrency.d  functional.d  random.d       traits.d
container      getopt.d      range          typecons.d
conv.d         internal      regex          typelist.d
cstream.d      json.d        signals.d      typetuple.d

Which makes me come back to Johannes, if I understand your link to std.meta right, std.meta is part of std/typetuple.d. Why does my compiler not look in std/typetuple.d instead? Maybe someone has a meta.d file for me? :p
July 07, 2017
In addition to Johannes' reply,
To be honest, I lost track of the GDC build I used, At least I installed the compiler from the site and from apt once.