summaryrefslogtreecommitdiff
path: root/demos/widget-factory/meson.build
blob: 800230b512db8c1c106a7e7f7cd3e37f7124a4df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# demos/widget-factory

objcopy_supports_add_symbol = false
objcopy = find_program('objcopy', required : false)
if objcopy.found()
  objcopy_supports_add_symbol = run_command(objcopy, '--help').stdout().contains('--add-symbol')
endif

ld = find_program('ld', required : false)

if build_machine.system() == 'linux' and objcopy.found() and objcopy_supports_add_symbol and ld.found()
  glib_compile_resources = find_program('glib-compile-resources')

  # Create the resource blob
  widgetfactory_gresource = custom_target('widgetfactory.gresource',
      input : 'widget-factory.gresource.xml',
      output : 'widgetfactory.gresource',
      depfile: 'widgetfactory.gresource.d',
      command : [glib_compile_resources,
                 '--generate',
                 '--target=@OUTPUT@',
                 '--dependency-file=@DEPFILE@',
                 '--sourcedir=' + meson.current_source_dir(),
                 '--sourcedir=' + meson.current_build_dir(),
                 '@INPUT@'])

  # Create resource data file
  widgetfactory_resources_c = custom_target('widgetfactory_resources.c',
      input : 'widget-factory.gresource.xml',
      output : 'widgetfactory_resources.c',
      depfile: 'widgetfactory_resources.c.d',
      command : [glib_compile_resources,
                 '--generate-source',
                 '--target=@OUTPUT@',
                 '--dependency-file=@DEPFILE@',
                 '--sourcedir=' + meson.current_source_dir(),
                 '--sourcedir=' + meson.current_build_dir(),
                 '--external-data',
                 '--c-name', '_g_binary_widgetfactory',
                 '@INPUT@'])

  # Create object file containing resource data
  widgetfactory_resources_binary = custom_target('widgetfactory_resources.o',
      input : widgetfactory_gresource,
      output : 'widgetfactory_resources.o',
      command : [ld,
                 '-r',
                 '-b','binary',
                 '@INPUT@',
                 '-o','@OUTPUT@'])

  # Rename symbol to match the one in the C file
  widgetfactory_resources_o = custom_target('widgetfactory_resources2.o',
    input : widgetfactory_resources_binary,
    output : 'widgetfactory_resources2.o',
    command : [objcopy,
                 '--add-symbol','_g_binary_widgetfactory_resource_data=.data:0',
                 '@INPUT@',
                 '@OUTPUT@'])

  widgetfactory_resources = [
      widgetfactory_resources_c,
      widgetfactory_resources_o,
    ]
else
  widgetfactory_resources = gnome.compile_resources('widgetfactory_resources',
    'widget-factory.gresource.xml',
    source_dir: '.',
  )
endif

executable('gtk4-widget-factory',
  sources: ['widget-factory.c', widgetfactory_resources],
  c_args: common_cflags,
  dependencies: [ libgtk_dep, demo_conf_h ],
  include_directories: confinc,
  win_subsystem: 'windows',
  link_args: extra_demo_ldflags,
  install: true,
)

# desktop file
install_data('org.gtk.WidgetFactory4.desktop', install_dir: gtk_applicationsdir)

# icons
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')

foreach size: ['scalable', 'symbolic']
  install_subdir('data/' + size, install_dir: icontheme_dir)
endforeach

# appdata
configure_file(
  input: 'org.gtk.WidgetFactory4.appdata.xml.in',
  output: 'org.gtk.WidgetFactory4.appdata.xml',
  configuration: appdata_config,
  install_dir: gtk_appdatadir
)