if config_h.has('HAVE_WAYLAND') == true
  subdir('generated')
endif

e_fm_shared_types = configuration_data()
e_fm_shared_types.set10('EEZE_MOUNT_CONFIG', config_h.has('HAVE_EEZE_MOUNT'))
e_fm_shared_types.set10('DBUS_MOUNT_CONFIG', config_h.has('HAVE_UDISKS_MOUNT'))

configure_file(input        : 'e_fm_shared_types.h.in',
               output       : 'e_fm_shared_types.h',
               configuration: e_fm_shared_types,
               install_dir  : dir_include_e)

deps_e = [
  dep_rt,
  dep_m,
  dep_dl,
  dep_eina,
  dep_eet,
  dep_eeze,
  dep_ecore,
  dep_ecore_ipc,
  dep_ecore_file,
  dep_ecore_con,
  dep_ecore_input,
  dep_ecore_input_evas,
  dep_evas,
  dep_efreet,
  dep_efreet_mime,
  dep_eio,
  dep_eldbus,
  dep_emotion,
  dep_elementary,
  dep_intl
]

deps_ckpass = [ ]

if freebsd == true
  deps_ckpass += dep_crypt
endif

if config_h.has('HAVE_PAM') == true
  deps_ckpass += dep_pam
endif

requires_e = ' '.join([
  ' '.join(['eina', efl_version]),
  'eet',
  'ecore',
  'ecore-ipc',
  'ecore-file',
  'ecore-con',
  'ecore-input',
  'ecore-input-evas',
  'evas',
  'efreet',
  'efreet-mime',
  'eio',
  requires_eeze,
  'eldbus',
  'emotion',
  'elementary'
])

src = [
  'e_about.c',
  'e_acpi.c',
  'e_actions.c',
  'e_atoms.c',
  'e_auth.c',
  'e_backlight.c',
  'e_bg.c',
  'e_bindings.c',
  'e_bryce.c',
  'e_bryce_editor.c',
  'e_client.c',
  'e_client_volume.c',
  'e_color.c',
  'e_color_dialog.c',
  'e_comp.c',
  'e_comp_canvas.c',
  'e_comp_cfdata.c',
  'e_comp_object.c',
  'e_config.c',
  'e_config_data.c',
  'e_config_dialog.c',
  'e_configure.c',
  'e_confirm_dialog.c',
  'e_datastore.c',
  'e_dbusmenu.c',
  'e_desk.c',
  'e_deskenv.c',
  'e_desklock.c',
  'e_deskmirror.c',
  'e_dialog.c',
  'e_dpms.c',
  'e_desktop_editor.c',
  'e_dnd.c',
  'e_entry_dialog.c',
  'e_env.c',
  'e_error.c',
  'e_exec.c',
  'e_exehist.c',
  'e_filereg.c',
  'e_flowlayout.c',
  'e_fm.c',
  'e_fm_custom.c',
  'e_fm_device.c',
  'e_fm_mime.c',
  'e_fm_op_registry.c',
  'e_fm_prop.c',
  'e_fm_shared_codec.c',
  'e_fm_shared_device.c',
  'e_focus.c',
  'e_font.c',
  'e_gadcon.c',
  'e_gadcon_popup.c',
  'e_gadget.c',
  'e_grabinput.c',
  'e_grab_dialog.c',
  'e_hints.c',
  'e_icon.c',
  'e_ilist.c',
  'e_import_config_dialog.c',
  'e_import_dialog.c',
  'e_init.c',
  'e_int_client_locks.c',
  'e_int_client_menu.c',
  'e_int_client_prop.c',
  'e_int_client_remember.c',
  'e_int_config_modules.c',
  'e_int_config_comp.c',
  'e_int_config_comp_match.c',
  'e_int_gadcon_config.c',
  'e_intl.c',
  'e_intl_data.c',
  'e_int_menus.c',
  'e_int_shelf_config.c',
  'e_int_toolbar_config.c',
  'e_ipc.c',
  'e_ipc_codec.c',
  'e_layout.c',
  'e_livethumb.c',
  'e_log.c',
  'e_main.c',
  'e_maximize.c',
  'e_menu.c',
  'e_module.c',
  'e_mouse.c',
  'e_moveresize.c',
  'e_msgbus.c',
  'e_notification.c',
  'e_msg.c',
  'e_obj_dialog.c',
  'e_object.c',
  'e_order.c',
  'e_pan.c',
  'e_path.c',
  'e_pixmap.c',
  'e_place.c',
  'e_pointer.c',
  'e_powersave.c',
  'e_prefix.c',
  'e_randr2.c',
  'e_remember.c',
  'e_resist.c',
  'e_scale.c',
  'e_screensaver.c',
  'e_scrollframe.c',
  'e_sha1.c',
  'e_shelf.c',
  'e_signals.c',
  'e_slidecore.c',
  'e_slider.c',
  'e_slidesel.c',
  'e_spectrum.c',
  'e_startup.c',
  'e_sys.c',
  'e_test.c',
  'e_theme_about.c',
  'e_theme.c',
  'e_thumb.c',
  'e_toolbar.c',
  'e_update.c',
  'e_user.c',
  'e_utils.c',
  'e_video.c',
  'e_widget_aspect.c',
  'e_widget_button.c',
  'e_widget.c',
  'e_widget_check.c',
  'e_widget_color_well.c',
  'e_widget_config_list.c',
  'e_widget_bgpreview.c',
  'e_widget_entry.c',
  'e_widget_filepreview.c',
  'e_widget_flist.c',
  'e_widget_font_preview.c',
  'e_widget_framelist.c',
  'e_widget_frametable.c',
  'e_widget_fsel.c',
  'e_widget_ilist.c',
  'e_widget_image.c',
  'e_widget_label.c',
  'e_widget_list.c',
  'e_widget_preview.c',
  'e_widget_radio.c',
  'e_widget_scrollframe.c',
  'e_widget_slider.c',
  'e_widget_spectrum.c',
  'e_widget_table.c',
  'e_widget_textblock.c',
  'e_widget_toolbar.c',
  'e_widget_toolbook.c',
  'e_win.c',
  'e_xkb.c',
  'e_xinerama.c',
  'e_zoomap.c',
  'e_zone.c',
  'efx/efx_bumpmapping.c',
  'efx/efx.c',
  'efx/efx_fade.c',
  'efx/efx_helpers.c',
  'efx/efx_move.c',
  'efx/efx_pan.c',
  'efx/e_efx_private.h',
  'efx/efx_queue.c',
  'efx/efx_resize.c',
  'efx/efx_rotate.c',
  'efx/efx_spin.c',
  'efx/efx_util.c',
  'efx/efx_zoom.c',
  'valgrind.h'
]

hdr = [
  'efx/e_Efx.h',
  'e_about.h',
  'e_acpi.h',
  'e_actions.h',
  'e_alert.h',
  'e_atoms.h',
  'e_auth.h',
  'e_backlight.h',
  'e_bg.h',
  'e_bindings.h',
  'e_bryce.h',
  'e_client.h',
  'e_client_volume.h',
  'e_client.x',
  'e_color_dialog.h',
  'e_color.h',
  'e_comp.h',
  'e_comp_canvas.h',
  'e_comp_cfdata.h',
  'e_comp_object.h',
  'e_comp_x.h',
  'e_comp_x_randr.h',
  'e_config_data.h',
  'e_config_dialog.h',
  'e_config.h',
  'e_configure.h',
  'e_confirm_dialog.h',
  'e_datastore.h',
  'e_dbusmenu.h',
  'e_desk.h',
  'e_deskenv.h',
  'e_desklock.h',
  'e_deskmirror.h',
  'e_dialog.h',
  'e_dnd.h',
  'e_dpms.h',
  'e_desktop_editor.h',
  'e_entry_dialog.h',
  'e_env.h',
  'e_error.h',
  'e_exec.h',
  'e_exehist.h',
  'e_filereg.h',
  'e_flowlayout.h',
  'e_fm_custom.h',
  'e_fm_device.h',
  'e_fm.h',
  'e_fm_mime.h',
  'e_fm_op.h',
  'e_fm_op_registry.h',
  'e_fm_prop.h',
  'e_fm_shared_codec.h',
  'e_fm_shared_device.h',
  'e_focus.h',
  'e_font.h',
  'e_gadcon.h',
  'e_gadcon_popup.h',
  'e_gadget.h',
  'e_gadget_types.h',
  'e_grabinput.h',
  'e_grab_dialog.h',
  'e.h',
  'e_macros.h',
  'e_hints.h',
  'e_icon.h',
  'e_ilist.h',
  'e_import_config_dialog.h',
  'e_import_dialog.h',
  'e_includes.h',
  'e_init.h',
  'e_int_client_locks.h',
  'e_int_client_menu.h',
  'e_int_client_prop.h',
  'e_int_client_remember.h',
  'e_int_config_modules.h',
  'e_int_gadcon_config.h',
  'e_intl_data.h',
  'e_intl.h',
  'e_int_menus.h',
  'e_int_shelf_config.h',
  'e_int_toolbar_config.h',
  'e_ipc_codec.h',
  'e_ipc.h',
  'e_layout.h',
  'e_livethumb.h',
  'e_log.h',
  'e_maximize.h',
  'e_menu.h',
  'e_mmx.h',
  'e_module.h',
  'e_mouse.h',
  'e_moveresize.h',
  'e_msgbus.h',
  'e_notification.h',
  'e_msg.h',
  'e_obj_dialog.h',
  'e_object.h',
  'e_order.h',
  'e_pan.h',
  'e_path.h',
  'e_pixmap.h',
  'e_place.h',
  'e_pointer.h',
  'e_powersave.h',
  'e_prefix.h',
  'e_randr2.h',
  'e_remember.h',
  'e_resist.h',
  'e_scale.h',
  'e_screensaver.h',
  'e_scrollframe.h',
  'e_sha1.h',
  'e_shelf.h',
  'e_signals.h',
  'e_slidecore.h',
  'e_slider.h',
  'e_slidesel.h',
  'e_spectrum.h',
  'e_startup.h',
  'e_sys.h',
  'e_test.h',
  'e_theme_about.h',
  'e_theme.h',
  'e_thumb.h',
  'e_toolbar.h',
  'e_update.h',
  'e_user.h',
  'e_utils.h',
  'e_video.h',
  'e_widget_aspect.h',
  'e_widget_button.h',
  'e_widget_check.h',
  'e_widget_color_well.h',
  'e_widget_config_list.h',
  'e_widget_bgpreview.h',
  'e_widget_entry.h',
  'e_widget_filepreview.h',
  'e_widget_flist.h',
  'e_widget_font_preview.h',
  'e_widget_framelist.h',
  'e_widget_frametable.h',
  'e_widget_fsel.h',
  'e_widget.h',
  'e_widget_ilist.h',
  'e_widget_image.h',
  'e_widget_label.h',
  'e_widget_list.h',
  'e_widget_preview.h',
  'e_widget_radio.h',
  'e_widget_scrollframe.h',
  'e_widget_slider.h',
  'e_widget_spectrum.h',
  'e_widget_table.h',
  'e_widget_textblock.h',
  'e_widget_toolbar.h',
  'e_widget_toolbook.h',
  'e_win.h',
  'e_xinerama.h',
  'e_xkb.h',
  'e_xsettings.h',
  'e_zoomap.h',
  'e_zone.h'
]

if config_h.has('HAVE_WAYLAND') == true
  src += [
    'e_comp_wl_data.c',
    'e_comp_wl_input.c',
    'e_comp_wl_dmabuf.c',
    'e_comp_wl.c',
    'e_comp_wl_extensions.c',
    'e_comp_wl_extensions_tizen.c',
    'e_gadget_runner.c',
    wayland_proto_c,
    wayland_proto_h
  ]
  hdr += [
    'e_comp_wl_data.h',
    'e_comp_wl_dmabuf.h',
    'e_comp_wl_input.h',
    'e_comp_wl.h'
  ]
  deps_e += dep_wayland
  requires_e = ' '.join([requires_e, requires_wayland])
endif

if config_h.has('HAVE_WAYLAND_ONLY') == false
  src += [
    'e_comp_x.c',
    'e_comp_x_randr.c',
    'e_alert.c',
    'e_xsettings.c'
  ]
  deps_e += dep_ecore_x
  requires_e = ' '.join([requires_e, 'ecore-x'])
endif

install_headers( hdr, subdir: 'enlightenment' )

executable('enlightenment', src,
           include_directories: include_directories('.', 'efx', 'generated', '../..'),
           dependencies       : deps_e,
           c_args             : '-DE_LOGGING=1',
           link_args          : '-rdynamic',
           install_dir        : dir_bin,
           install            : true
          )

dir_e_utils = join_paths(dir_lib, 'enlightenment/utils')

executable('enlightenment_imc',
           [ 'e_config_data.c',
             'e_imc_main.c',
             'e_intl_data.c'
           ],
           include_directories: include_directories('.', '../..'),
           dependencies       : [ dep_eina, dep_eet, dep_ecore_file ],
           install_dir        : dir_bin,
           install            : true
          )

executable('enlightenment_start',
           [ 'e_start_main.c' ],
           include_directories: include_directories('../..'),
           dependencies       : dep_eina,
           install_dir        : dir_bin,
           install            : true
          )

executable('enlightenment_filemanager',
           [ 'e_fm_cmdline.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_eina, dep_ecore, dep_ecore_file, dep_eldbus, dep_efreet ],
           install_dir        : dir_bin,
           install            : true
          )

executable('enlightenment_open',
           [ 'e_open.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_eina, dep_ecore, dep_efreet, dep_efreet_mime ],
           install_dir        : dir_bin,
           install            : true
          )

executable('enlightenment_askpass',
           [ 'e_askpass_main.c' ],
           dependencies: [ dep_elementary ],
           install_dir : dir_bin,
           install     : true
          )

executable('enlightenment_backlight',
           [ 'e_backlight_main.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_eina, dep_eeze ],
           c_args             : suid_cflags,
           link_args          : suid_ldflags,
           install_dir        : dir_e_utils,
           install            : true
          )
suid_exes += join_paths(dir_e_utils, 'enlightenment_backlight')

executable('enlightenment_fm_op',
           [ 'e_fm_op.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_m, dep_eina, dep_ecore, dep_ecore_file ],
           install_dir        : dir_e_utils,
           install            : true
          )

executable('enlightenment_thumb',
           [ 'e_thumb_main.c', 'e_sha1.c', 'e_user.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_m, dep_eina, dep_eet, dep_evas, dep_ecore, dep_ecore_ipc, dep_ecore_evas, dep_efreet, dep_ecore_file, dep_edje, dep_emotion ],
           install_dir        : dir_e_utils,
           install            : true
          )

executable('enlightenment_elm_cfgtool',
           [ 'e_elm_cfgtool_main.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_m, dep_elementary ],
           install_dir        : dir_e_utils,
           install            : true
          )

executable('enlightenment_static_grabber',
           [ 'e_static_grab.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_eina, dep_eet ],
           install_dir        : dir_e_utils,
           install            : true
          )

deps_e_alert = []
if config_h.has('HAVE_WAYLAND') == true
  deps_e_alert += [ dep_ecore_drm2, dep_ecore_input, dep_dl ]
endif
if config_h.has('HAVE_WAYLAND_ONLY') == false
  deps_e_alert += [
    dependency('xcb'),
    dependency('xcb-shape'),
    dependency('xcb-keysyms')
  ]
endif
executable('enlightenment_alert',
           [ 'e_alert_main.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [ dep_eina, dep_ecore, dep_evas, dep_ecore_ipc, deps_e_alert ],
           install_dir        : dir_e_utils,
           install            : true
          )

executable('enlightenment_sys',
           [ 'e_sys_main.c', 'e_sys_l2ping.c' ],
           include_directories: include_directories('../..'),
           dependencies       : [dep_eina, dep_ecore, dep_bluez],
           c_args             : suid_cflags,
           link_args          : suid_ldflags,
           install_dir        : dir_e_utils,
           install            : true
          )
suid_exes += join_paths(dir_e_utils, 'enlightenment_sys')

executable('enlightenment_ckpasswd',
           'e_ckpasswd_main.c',
           include_directories: include_directories('../..'),
           dependencies : deps_ckpass,
           c_args       : suid_cflags,
           link_args    : suid_ldflags,
           install_dir  : dir_e_utils,
           install      : true
          )
suid_exes += join_paths(dir_e_utils, 'enlightenment_ckpasswd')

if config_h.has('HAVE_WAYLAND') == true
	shared_library('loader',
			['e_gadget_loader.c', gadget_loader_proto_files],
		name_prefix: '',
		include_directories: include_directories('../..'),
		dependencies: [
      dep_dl,
			dependency('elementary'),
			dependency('ecore-wl2'),
			dependency('wayland-client'),
			cc.find_library('uuid')],
		install_dir: join_paths([dir_lib, 'enlightenment/gadgets/', module_arch]),
		install: true)
endif
subdir('e_fm')
