subdir('a11y') subdir('deprecated') subdir('inspector') gtk_cargs = [ '-DGTK_COMPILATION', '-DG_LOG_DOMAIN="Gtk"', '-DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED', '-DGTK_BINARY_VERSION="@0@"'.format(gtk_binary_version), '-DGTK_HOST="@0@"'.format(host_machine.system()), '-DGTK_DATA_PREFIX="@0@"'.format(gtk_prefix), ] # List of sources that do not contain public API, and should not be # introspected gtk_private_sources = files([ 'fnmatch.c', 'gdkpixbufutils.c', 'gsettings-mapping.c', 'gtkaccessibleattributeset.c', 'gtkaccessiblevalue.c', 'gtkaccessiblevaluestatic.c', 'gtkactionhelper.c', 'gtkactionmuxer.c', 'gtkactionobservable.c', 'gtkactionobserver.c', 'gtkallocatedbitmask.c', 'gtkapplicationaccels.c', 'gtkapplicationimpl.c', 'gtkbookmarksmanager.c', 'gtkbuilder-menus.c', 'gtkbuilderprecompile.c', 'gtkbuiltinicon.c', 'gtkcolorplane.c', 'gtkcolorpicker.c', 'gtkcolorpickerkwin.c', 'gtkcolorpickerportal.c', 'gtkcolorpickershell.c', 'gtkcolorscale.c', 'gtkcolorswatch.c', 'gtkcolumnlistitemfactory.c', 'gtkcolumnviewcell.c', 'gtkcolumnviewlayout.c', 'gtkcolumnviewtitle.c', 'gtkconstraintexpression.c', 'gtkconstraintsolver.c', 'gtkconstraintvflparser.c', 'gtkcssanimatedstyle.c', 'gtkcssanimation.c', 'gtkcssarrayvalue.c', 'gtkcssbgsizevalue.c', 'gtkcssbordervalue.c', 'gtkcsscalcvalue.c', 'gtkcsscolorvalue.c', 'gtkcsscornervalue.c', 'gtkcssdimensionvalue.c', 'gtkcssdynamic.c', 'gtkcsseasevalue.c', 'gtkcssenumvalue.c', 'gtkcssfiltervalue.c', 'gtkcssfontfeaturesvalue.c', 'gtkcssfontvariationsvalue.c', 'gtkcssimage.c', 'gtkcssimageconic.c', 'gtkcssimagecrossfade.c', 'gtkcssimagefallback.c', 'gtkcssimageicontheme.c', 'gtkcssimageinvalid.c', 'gtkcssimagelinear.c', 'gtkcssimagepaintable.c', 'gtkcssimageradial.c', 'gtkcssimagerecolor.c', 'gtkcssimagescaled.c', 'gtkcssimageurl.c', 'gtkcssimagevalue.c', 'gtkcssinheritvalue.c', 'gtkcssinitialvalue.c', 'gtkcsskeyframes.c', 'gtkcsslineheightvalue.c', 'gtkcsslookup.c', 'gtkcssnode.c', 'gtkcssnodedeclaration.c', 'gtkcssnodestylecache.c', 'gtkcssnumbervalue.c', 'gtkcsspalettevalue.c', 'gtkcsspositionvalue.c', 'gtkcssrepeatvalue.c', 'gtkcssselector.c', 'gtkcssshadowvalue.c', 'gtkcssshorthandproperty.c', 'gtkcssshorthandpropertyimpl.c', 'gtkcssstaticstyle.c', 'gtkcssstringvalue.c', 'gtkcssstyle.c', 'gtkcssstylechange.c', 'gtkcssstyleproperty.c', 'gtkcssstylepropertyimpl.c', 'gtkcsstransformvalue.c', 'gtkcsstransientnode.c', 'gtkcsstransition.c', 'gtkcsstypes.c', 'gtkcssunsetvalue.c', 'gtkcssvalue.c', 'gtkcsswidgetnode.c', 'gtkdrop.c', 'gtkfilechooserentry.c', 'gtkfilechoosererrorstack.c', 'gtkfilechoosernativeportal.c', 'gtkfilechooserutils.c', 'gtkfilechoosercell.c', 'gtkfilesystemmodel.c', 'gtkfilethumbnail.c', 'gtkgizmo.c', 'gtkiconcache.c', 'gtkiconcachevalidator.c', 'gtkiconhelper.c', 'gtkjoinedmenu.c', 'gtkkineticscrolling.c', 'gtkmagnifier.c', 'gtkmenusectionbox.c', 'gtkmenutracker.c', 'gtkmenutrackeritem.c', 'gtkpanedhandle.c', 'gtkpango.c', 'gskpango.c', 'gtkpathbar.c', 'gtkplacessidebar.c', 'gtkplacesview.c', 'gtkplacesviewrow.c', 'gtkpointerfocus.c', 'gtkpopovercontent.c', 'gtkprintutils.c', 'gtkprivate.c', 'gtkprogresstracker.c', 'gtkrbtree.c', 'gtkquery.c', 'gtkscaler.c', 'gtksearchengine.c', 'gtksearchenginemodel.c', 'gtksecurememory.c', 'gtksizerequestcache.c', 'gtksortkeys.c', 'gtkstyleanimation.c', 'gtkstylecascade.c', 'gtkstyleproperty.c', 'gtktextbtree.c', 'gtktexthistory.c', 'gtktextviewchild.c', 'timsort/gtktimsort.c', 'gtktrashmonitor.c', ]) # List of files that contain public API, and should be introspected gtk_public_sources = files([ 'gtkaboutdialog.c', 'gtkaccelgroup.c', 'gtkaccessible.c', 'gtkaccessiblerange.c', 'gtkactionable.c', 'gtkactionbar.c', 'gtkadjustment.c', 'gtkalertdialog.c', 'gtkapplication.c', 'gtkapplicationwindow.c', 'gtkaspectframe.c', 'gtkatcontext.c', 'gtkbinlayout.c', 'gtkbitset.c', 'gtkboolfilter.c', 'gtkbookmarklist.c', 'gtkborder.c', 'gtkboxlayout.c', 'gtkbox.c', 'gtkbuildable.c', 'gtkbuilder.c', 'gtkbuilderlistitemfactory.c', 'gtkbuilderparser.c', 'gtkbuilderscope.c', 'gtkbutton.c', 'gtkcalendar.c', 'gtkcenterbox.c', 'gtkcenterlayout.c', 'gtkcheckbutton.c', 'gtkcoloreditor.c', 'gtkcolorchooserdialog.c', 'gtkcolorchooserwidget.c', 'gtkcolordialog.c', 'gtkcolordialogbutton.c', 'gtkcolorutils.c', 'gtkcolumnview.c', 'gtkcolumnviewcolumn.c', 'gtkcolumnviewsorter.c', 'gtkcomposetable.c', 'gtkconstraintguide.c', 'gtkconstraintlayout.c', 'gtkconstraint.c', 'gtkcssprovider.c', 'gtkcustomfilter.c', 'gtkcustomlayout.c', 'gtkcustomsorter.c', 'gtkdialogerror.c', 'gtkdirectorylist.c', 'gtkdragicon.c', 'gtkdragsource.c', 'gtkdrawingarea.c', 'gtkdropcontrollermotion.c', 'gtkdroptarget.c', 'gtkdroptargetasync.c', 'gtkdropdown.c', 'gtkeditable.c', 'gtkeditablelabel.c', 'gtkemojichooser.c', 'gtkemojicompletion.c', 'gtkentry.c', 'gtkentrybuffer.c', 'gtkeventcontroller.c', 'gtkeventcontrollerfocus.c', 'gtkeventcontrollerkey.c', 'gtkeventcontrollerlegacy.c', 'gtkeventcontrollermotion.c', 'gtkeventcontrollerscroll.c', 'gtkexpander.c', 'gtkexpression.c', 'gtkfilechooserdialog.c', 'gtkfilechoosernative.c', 'gtkfilechooserwidget.c', 'gtkfiledialog.c', 'gtkfilefilter.c', 'gtkfilelauncher.c', 'gtkfilter.c', 'gtkfilterlistmodel.c', 'gtkfixed.c', 'gtkfixedlayout.c', 'gtkflattenlistmodel.c', 'gtkflowbox.c', 'gtkfontchooserdialog.c', 'gtkfontchooserutils.c', 'gtkfontchooserwidget.c', 'gtkfontdialog.c', 'gtkfontdialogbutton.c', 'gtkframe.c', 'gtkgesture.c', 'gtkgesturedrag.c', 'gtkgesturelongpress.c', 'gtkgestureclick.c', 'gtkgesturepan.c', 'gtkgesturerotate.c', 'gtkgesturesingle.c', 'gtkgesturestylus.c', 'gtkgestureswipe.c', 'gtkgesturezoom.c', 'gtkglarea.c', 'gtkgrid.c', 'gtkgridlayout.c', 'gtkgridview.c', 'gtkheaderbar.c', 'gtkicontheme.c', 'gtkimage.c', 'gtkimagedefinition.c', 'gtkimcontext.c', 'gtkimcontextsimple.c', 'gtkimmodule.c', 'gtkimmulticontext.c', 'gtkinscription.c', 'gtklabel.c', 'gtklayoutchild.c', 'gtklayoutmanager.c', 'gtklevelbar.c', 'gtklistbase.c', 'gtklinkbutton.c', 'gtklistbox.c', 'gtklistitem.c', 'gtklistitemfactory.c', 'gtklistitemmanager.c', 'gtklistitemwidget.c', 'gtklistlistmodel.c', 'gtklistview.c', 'gtkmain.c', 'gtkmaplistmodel.c', 'gtkmediacontrols.c', 'gtkmediafile.c', 'gtkmediastream.c', 'gtkmenubutton.c', 'gtkmessagedialog.c', 'gtkmodelbutton.c', 'gtkmodules.c', 'gtkmountoperation.c', 'gtkmultifilter.c', 'gtkmultiselection.c', 'gtkmultisorter.c', 'gtknativedialog.c', 'gtknomediafile.c', 'gtknoselection.c', 'gtknotebook.c', 'gtknumericsorter.c', 'gtkorientable.c', 'gtkoverlay.c', 'gtkoverlaylayout.c', 'gtkpadcontroller.c', 'gtkpagesetup.c', 'gtkpaned.c', 'gtkpapersize.c', 'gtkpasswordentry.c', 'gtkpasswordentrybuffer.c', 'gtkpicture.c', 'gtkpopover.c', 'gtkpopovermenu.c', 'gtkpopovermenubar.c', 'gtkprintcontext.c', 'gtkprintoperation.c', 'gtkprintoperationpreview.c', 'gtkprintsettings.c', 'gtkprogressbar.c', 'gtkpropertylookuplistmodel.c', 'gtkrange.c', 'gtkrecentmanager.c', 'gtkrenderbackground.c', 'gtkrenderborder.c', 'gtkrendericon.c', 'gtkrenderlayout.c', 'gtkrendernodepaintable.c', 'gtkrevealer.c', 'gtkroot.c', 'gtknative.c', 'gtkroundedbox.c', 'gtkscale.c', 'gtkscalebutton.c', 'gtkscrollable.c', 'gtkscrollbar.c', 'gtkscrolledwindow.c', 'gtksearchbar.c', 'gtksearchentry.c', 'gtkselectionfiltermodel.c', 'gtkselectionmodel.c', 'gtkseparator.c', 'gtksettings.c', 'gtkshortcut.c', 'gtkshortcutaction.c', 'gtkshortcutcontroller.c', 'gtkshortcutlabel.c', 'gtkshortcutmanager.c', 'gtkshortcutsgroup.c', 'gtkshortcutssection.c', 'gtkshortcutsshortcut.c', 'gtkshortcutswindow.c', 'gtkshortcuttrigger.c', 'gtksidebarrow.c', 'gtksignallistitemfactory.c', 'gtksingleselection.c', 'gtksizegroup.c', 'gtksizerequest.c', 'gtkslicelistmodel.c', 'gtksnapshot.c', 'gtksorter.c', 'gtksortlistmodel.c', 'gtkspinbutton.c', 'gtkspinner.c', 'gtkstack.c', 'gtkstacksidebar.c', 'gtkstackswitcher.c', 'gtkstringfilter.c', 'gtkstringlist.c', 'gtkstringsorter.c', 'gtkstyleprovider.c', 'gtkswitch.c', 'gtksymbolicpaintable.c', 'gtktestatcontext.c', 'gtktestutils.c', 'gtktext.c', 'gtktextattributes.c', 'gtktextbuffer.c', 'gtktextchild.c', 'gtktexthandle.c', 'gtktextiter.c', 'gtktextlayout.c', 'gtktextlinedisplaycache.c', 'gtktextmark.c', 'gtktextsegment.c', 'gtktexttag.c', 'gtktexttagtable.c', 'gtktexttypes.c', 'gtktextutil.c', 'gtktextview.c', 'gtktogglebutton.c', 'gtktooltip.c', 'gtktooltipwindow.c', 'gtktreeexpander.c', 'gtktreelistmodel.c', 'gtktreelistrowsorter.c', 'gtkurilauncher.c', 'gtkversion.c', 'gtkvideo.c', 'gtkviewport.c', 'gtkvolumebutton.c', 'gtkwidget.c', 'gtkwidgetfocus.c', 'gtkwidgetpaintable.c', 'gtkwindow.c', 'gtkwindowcontrols.c', 'gtkwindowgroup.c', 'gtkwindowhandle.c', ]) gtk_private_type_headers = files([ 'gtkcsstypesprivate.h', 'gtktexthandleprivate.h', 'gtkplacessidebarprivate.h', ]) gtk_public_headers = files([ 'gtkaboutdialog.h', 'gtkaccelgroup.h', 'gtkaccessible.h', 'gtkaccessiblerange.h', 'gtkactionable.h', 'gtkactionbar.h', 'gtkadjustment.h', 'gtkalertdialog.h', 'gtkapplication.h', 'gtkapplicationwindow.h', 'gtkaspectframe.h', 'gtkatcontext.h', 'gtkbinlayout.h', 'gtkbitset.h', 'gtkbookmarklist.h', 'gtkboolfilter.h', 'gtkborder.h', 'gtkbox.h', 'gtkboxlayout.h', 'gtkbuildable.h', 'gtkbuilder.h', 'gtkbuilderlistitemfactory.h', 'gtkbuilderscope.h', 'gtkbutton.h', 'gtkcalendar.h', 'gtkcenterbox.h', 'gtkcenterlayout.h', 'gtkcheckbutton.h', 'gtkcolordialog.h', 'gtkcolordialogbutton.h', 'gtkcolorutils.h', 'gtkcolumnview.h', 'gtkcolumnviewcolumn.h', 'gtkcolumnviewsorter.h', 'gtkconstraintguide.h', 'gtkconstraintlayout.h', 'gtkconstraint.h', 'gtkcssprovider.h', 'gtkcustomfilter.h', 'gtkcustomlayout.h', 'gtkcustomsorter.h', 'gtkdebug.h', 'gtkdialogerror.h', 'gtkdirectorylist.h', 'gtkdragicon.h', 'gtkdragsource.h', 'gtkdrawingarea.h', 'gtkdropcontrollermotion.h', 'gtkdroptarget.h', 'gtkdroptargetasync.h', 'gtkdropdown.h', 'gtkeditable.h', 'gtkeditablelabel.h', 'gtkemojichooser.h', 'gtkentry.h', 'gtkentrybuffer.h', 'gtkenums.h', 'gtkeventcontroller.h', 'gtkeventcontrollerfocus.h', 'gtkeventcontrollerkey.h', 'gtkeventcontrollerscroll.h', 'gtkeventcontrollermotion.h', 'gtkeventcontrollerlegacy.h', 'gtkexpander.h', 'gtkexpression.h', 'gtkfiledialog.h', 'gtkfilefilter.h', 'gtkfilelauncher.h', 'gtkfilter.h', 'gtkfilterlistmodel.h', 'gtkfixed.h', 'gtkfixedlayout.h', 'gtkflattenlistmodel.h', 'gtkflowbox.h', 'gtkfontdialog.h', 'gtkfontdialogbutton.h', 'gtkframe.h', 'gtkgesture.h', 'gtkgesturedrag.h', 'gtkgesturelongpress.h', 'gtkgestureclick.h', 'gtkgesturepan.h', 'gtkgesturerotate.h', 'gtkgesturesingle.h', 'gtkgesturestylus.h', 'gtkgestureswipe.h', 'gtkgesturezoom.h', 'gtkglarea.h', 'gtkgrid.h', 'gtkgridlayout.h', 'gtkgridview.h', 'gtkheaderbar.h', 'gtkicontheme.h', 'gtkimage.h', 'gtkimcontext.h', 'gtkimcontextsimple.h', 'gtkimmodule.h', 'gtkimmulticontext.h', 'gtkinscription.h', 'gtklabel.h', 'gtklayoutchild.h', 'gtklayoutmanager.h', 'gtklevelbar.h', 'gtklinkbutton.h', 'gtklistbase.h', 'gtklistbox.h', 'gtklistitem.h', 'gtklistitemfactory.h', 'gtklistview.h', 'gtkmain.h', 'gtkmaplistmodel.h', 'gtkmediacontrols.h', 'gtkmediafile.h', 'gtkmediastream.h', 'gtkmenubutton.h', 'gtkmountoperation.h', 'gtkmultifilter.h', 'gtkmultiselection.h', 'gtkmultisorter.h', 'gtknative.h', 'gtknativedialog.h', 'gtknoselection.h', 'gtknotebook.h', 'gtknumericsorter.h', 'gtkorientable.h', 'gtkoverlay.h', 'gtkoverlaylayout.h', 'gtkpadcontroller.h', 'gtkpagesetup.h', 'gtkpaned.h', 'gtkpapersize.h', 'gtkpasswordentry.h', 'gtkpasswordentrybuffer.h', 'gtkpicture.h', 'gtkpopover.h', 'gtkpopovermenu.h', 'gtkpopovermenubar.h', 'gtkprintcontext.h', 'gtkprintoperation.h', 'gtkprintoperationpreview.h', 'gtkprintsettings.h', 'gtkprogressbar.h', 'gtkrange.h', 'gtkrecentmanager.h', 'gtkrevealer.h', 'gtkroot.h', 'gtkscale.h', 'gtkscalebutton.h', 'gtkscrollable.h', 'gtkscrollbar.h', 'gtkscrolledwindow.h', 'gtksearchbar.h', 'gtksearchentry.h', 'gtkselectionfiltermodel.h', 'gtkselectionmodel.h', 'gtkseparator.h', 'gtksettings.h', 'gtkshortcut.h', 'gtkshortcutaction.h', 'gtkshortcutcontroller.h', 'gtkshortcutlabel.h', 'gtkshortcutmanager.h', 'gtkshortcutsgroup.h', 'gtkshortcutssection.h', 'gtkshortcutsshortcut.h', 'gtkshortcutswindow.h', 'gtkshortcuttrigger.h', 'gtksignallistitemfactory.h', 'gtksingleselection.h', 'gtksizegroup.h', 'gtksizerequest.h', 'gtkslicelistmodel.h', 'gtksnapshot.h', 'gtksorter.h', 'gtksortlistmodel.h', 'gtkspinbutton.h', 'gtkspinner.h', 'gtkstack.h', 'gtkstacksidebar.h', 'gtkstackswitcher.h', 'gtkstringfilter.h', 'gtkstringlist.h', 'gtkstringsorter.h', 'gtkstyleprovider.h', 'gtkswitch.h', 'gtksymbolicpaintable.h', 'gtktestatcontext.h', 'gtktestutils.h', 'gtktext.h', 'gtktextbuffer.h', 'gtktextchild.h', 'gtktextiter.h', 'gtktextmark.h', 'gtktexttag.h', 'gtktexttagtable.h', 'gtktextview.h', 'gtktogglebutton.h', 'gtktooltip.h', 'gtktreeexpander.h', 'gtktreelistmodel.h', 'gtktreelistrowsorter.h', 'gtktypes.h', 'gtkurilauncher.h', 'gtkvideo.h', 'gtkviewport.h', 'gtkvolumebutton.h', 'gtkwidget.h', 'gtkwidgetpaintable.h', 'gtkwindow.h', 'gtkwindowcontrols.h', 'gtkwindowgroup.h', 'gtkwindowhandle.h', 'gtk.h', ]) install_headers(gtk_public_headers, subdir: 'gtk-4.0/gtk/') install_headers(gtk_deprecated_headers, subdir: 'gtk-4.0/gtk/deprecated') gtk_sources = gtk_public_sources + gtk_private_sources proto_sources = [ ['text-input', 'unstable', 'v3', ], ] im_wayland_sources = files('gtkimcontextwayland.c') foreach p: proto_sources proto_name = p.get(0) proto_stability = p.get(1) if wayland_enabled if proto_stability == 'stable' output_base = proto_name input = files('@0@.xml'.format(proto_name)) else proto_version = p.get(2) output_base = '@0@-@1@-@2@'.format(proto_name, proto_stability, proto_version) input = files(join_paths(wlproto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))) endif # wayland_scanner is defined in gdk/wayland/meson.build im_wayland_sources += custom_target('@0@ client header'.format(output_base), input: input, output: '@0@-client-protocol.h'.format(output_base), command: [ wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@', ], ) im_wayland_sources += custom_target('@0@ source'.format(output_base), input: input, output: '@0@-protocol.c'.format(output_base), command: [ wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@', ], ) endif endforeach if os_unix and tracker3_dep.found() gtk_sources += 'gtksearchenginetracker3.c' endif if os_unix gtk_unix_print_headers = [ 'gtkpagesetupunixdialog.h', 'gtkprintunixdialog.h', 'gtkprinter.h', 'gtkprintjob.h', 'gtkunixprint-autocleanups.h', 'gtkunixprint.h', ] install_headers(gtk_unix_print_headers, subdir: 'gtk-4.0/unix-print/gtk') gtk_unix_print_sources = files([ 'gtkcustompaperunixdialog.c', 'gtkpagesetupunixdialog.c', 'gtkprintbackend.c', 'gtkprinter.c', 'gtkprinteroption.c', 'gtkprinteroptionset.c', 'gtkprinteroptionwidget.c', 'gtkprintjob.c', 'gtkprintoperation-unix.c', 'gtkprintoperation-portal.c', 'gtkprintunixdialog.c', ]) gtk_sources += gtk_unix_print_sources endif if os_win32 gtk_win32_print_headers = [] gtk_win32_print_sources = files([ 'gtkprint-win32.c', 'gtkprintoperation-win32.c', 'gtkfilechoosernativewin32.c', 'gtkwin32.c', ]) gtk_sources += gtk_win32_print_sources gtk_sources += [ 'gtkcolorpickerwin32.c', 'gtkimcontextime.c' ] if cc.has_header_symbol('windows.h', 'IPrintDialogCallback') cdata.set('HAVE_IPRINTDIALOGCALLBACK', 1) endif endif if x11_enabled gtk_sources += ['gtkapplication-x11.c', 'gtkmountoperation-x11.c'] endif if wayland_enabled gtk_sources += ['gtkapplication-wayland.c'] gtk_sources += im_wayland_sources endif if x11_enabled or wayland_enabled gtk_sources += ['gtkapplication-dbus.c'] endif if win32_enabled gtk_sources += ['gtkmountoperation-stub.c'] endif if macos_enabled gtk_sources += files([ 'gtksearchenginequartz.c', 'gtkapplication-quartz.c', 'gtkapplication-quartz-menu.c', 'gtkfilechoosernativequartz.c', 'gtkimcontextquartz.c', 'gtkquartz.c', ]) gtk_cargs += ['-xobjective-c'] # FIXME? maybe add_languages() instead? endif if not (x11_enabled or win32_enabled) gtk_sources += ['gtkmountoperation-stub.c', ] endif if not os_win32 gtk_sources += ['gtkopenuriportal.c', ] endif gen_gtk_gresources_xml = find_program('gen-gtk-gresources-xml.py') gtk_gresources_xml = configure_file(output: 'gtk.gresources.xml', command: [ gen_gtk_gresources_xml, meson.current_source_dir(), host_machine.endian(), '@OUTPUT@' ], ) theme_deps = [] # For git checkouts, but not for tarballs... if not fs.exists('theme/Default/Default-light.css') # ... build the theme files sassc = find_program('sassc', native: true) sassc_opts = [ '-a', '-M', '-t', 'compact' ] subdir('theme/Default') theme_deps += [ default_theme_deps, ] endif objcopy_supports_add_symbol = false objcopy = find_program('objcopy', required : false) if objcopy.found() objcopy_supports_add_symbol = run_command(objcopy, '--help', check: false).stdout().contains('--add-symbol') endif ld = find_program('ld', required : false) if not meson.is_cross_build() and build_machine.cpu_family() == 'x86_64' and 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 gtk_gresource = custom_target('gtk.gresource', input : gtk_gresources_xml, depends : theme_deps, output : 'gtk.gresource', depfile : 'gtk.gresource.d', command : [glib_compile_resources, '--generate', '--internal', '--target=@OUTPUT@', '--dependency-file=@DEPFILE@', '--sourcedir=' + meson.current_source_dir(), '--sourcedir=' + meson.current_build_dir(), '@INPUT@']) # Create resource data file gtk_resources_c = custom_target('gtkresources.c', input : gtk_gresources_xml, depends : theme_deps, output : 'gtkresources.c', depfile : 'gtkresources.c.d', command : [glib_compile_resources, '--generate-source', '--internal', '--target=@OUTPUT@', '--dependency-file=@DEPFILE@', '--sourcedir=' + meson.current_source_dir(), '--sourcedir=' + meson.current_build_dir(), '--external-data', '--c-name', '_gtk', '--manual-register', '@INPUT@']) gtk_resources_h = custom_target('gtkresources.h', input : gtk_gresources_xml, depends : theme_deps, output : 'gtkresources.h', depfile : 'gtkresources.h.d', command : [glib_compile_resources, '--generate-header', '--internal', '--target=@OUTPUT@', '--dependency-file=@DEPFILE@', '--sourcedir=' + meson.current_source_dir(), '--sourcedir=' + meson.current_build_dir(), '--external-data', '--c-name', '_gtk', '--manual-register', '@INPUT@']) # Create object file containing resource data gtk_resources_binary = custom_target('gtkresources_blob.o', input : gtk_gresource, output : 'gtkresources_blob.o', command : [ld, '-z', 'noexecstack', '-r', '-b','binary', '@INPUT@', '-o','@OUTPUT@']) # Rename symbol to match the one in the C file gtk_resources_o = custom_target('gtkresources_blob2.o', input : gtk_resources_binary, output : 'gtkresources_blob2.o', command : [objcopy, '--strip-all', '--rename-section', '.data=.gresource.gtk', '--add-symbol','_gtk_resource_data=.gresource.gtk:0', '@INPUT@', '@OUTPUT@']) gtkresources = [ gtk_resources_c, gtk_resources_h, gtk_resources_o, ] else gtkresources = gnome.compile_resources('gtkresources', gtk_gresources_xml, dependencies: theme_deps, source_dir: [ # List in order of preference meson.current_build_dir(), meson.current_source_dir(), ], c_name: '_gtk', extra_args: '--manual-register', ) endif foreach lang : [ 'de', 'da', 'fr', 'es', 'hu', 'it', 'ko', 'lt', 'ms', 'nl', 'pl', 'pt', 'ru', 'sv', 'uk', 'zh' ] conf = configuration_data() conf.set('lang', lang) resxml = configure_file(input: 'emoji/gresource.xml.in', output: lang + '.gresource.xml', configuration: conf ) gnome.compile_resources(lang, resxml, source_dir: 'emoji', gresource_bundle: true, install: true, install_dir: gtk_datadir / 'gtk-4.0/emoji', ) endforeach gtk_x11_sources = files([ 'gtkapplication-x11.c', 'gtkmountoperation-x11.c', ]) gtk_wayland_sources = files([ 'gtkapplication-wayland.c' ]) gtk_use_wayland_or_x11_c_sources = files([ 'gtkapplication-dbus.c' ]) gtk_dbus_src = gnome.gdbus_codegen('gtkdbusgenerated', 'gtkdbusinterfaces.xml', interface_prefix: 'org.Gtk.', namespace: '_Gtk', ) gtkmarshalers = gnome.genmarshal('gtkmarshalers', sources: 'gtkmarshalers.list', prefix: '_gtk_marshal', valist_marshallers: true, ) gtkmarshal_h = gtkmarshalers[1] gtktypebuiltins = gnome.mkenums('gtktypebuiltins', sources: gtk_public_headers + gtk_deprecated_headers, c_template: 'gtktypebuiltins.c.template', h_template: 'gtktypebuiltins.h.template', install_dir: gtk_includedir / 'gtk-4.0/gtk', install_header: true, ) gtktypebuiltins_h = gtktypebuiltins[1] gtkprivatetypebuiltins = gnome.mkenums('gtkprivatetypebuiltins', sources: gtk_private_type_headers, c_template: 'gtkprivatetypebuiltins.c.template', h_template: 'gtkprivatetypebuiltins.h.template', ) gtkprivatetypebuiltins_h = gtkprivatetypebuiltins[1] # Generate gtktypefuncs.inc typefuncs = custom_target('gtktypefuncs.inc', depends: [ gdkenum_h, gskenum_h, ], output: 'gtktypefuncs.inc', input: gdk_headers + gsk_public_headers + gtk_public_headers + gtk_deprecated_headers + [ gtktypebuiltins_h, ] + [ gtk_css_enum_h, gdkenum_h, gskenum_h, ], command: [ find_program('gentypefuncs.py'), '@OUTPUT@', '@INPUT@', ], install: false, ) if os_win32 xdp_dbus_generated = [] else xdp_dbus_generated = gnome.gdbus_codegen('xdp-dbus', sources : 'org.freedesktop.portal.OpenURI.xml', interface_prefix : 'org.freedesktop.portal.', namespace : 'GtkXdp', ) endif gtkversion_cdata = configuration_data() gtkversion_cdata.set('GTK_MAJOR_VERSION', gtk_major_version) gtkversion_cdata.set('GTK_MINOR_VERSION', gtk_minor_version) gtkversion_cdata.set('GTK_MICRO_VERSION', gtk_micro_version) gtkversion_cdata.set('GTK_BINARY_AGE', gtk_binary_age) gtkversion_cdata.set('GTK_INTERFACE_AGE', gtk_interface_age) gtkversion_cdata.set('GTK_VERSION', gtk_version) gtkversion_cdata.set('GTK_API_VERSION', gtk_api_version) if host_machine.system() == 'windows' gtkversion_cdata.set('EXE_MANIFEST_ARCHITECTURE', '*') endif gtkversion = configure_file(input: 'gtkversion.h.in', output: 'gtkversion.h', configuration: gtkversion_cdata, install: true, install_dir: gtk_includedir / 'gtk-4.0/gtk', ) gtk_gen_headers = [ gtkmarshal_h, gtktypebuiltins_h, gtkprivatetypebuiltins_h, gtkversion, ] font_script_language_sources = files([ 'language-names.c', ]) gtk_sources += [ gtk_a11y_src, gtk_dbus_src, gtk_deprecated_sources, inspector_sources, gtkresources, gtkmarshalers, gtkprivatetypebuiltins, gtktypebuiltins, font_script_language_sources, ] gtk_deps = [ gmodule_dep, gobject_dep, platform_gio_dep, pangocairo_dep, harfbuzz_dep, fribidi_dep, cairogobj_dep, fontconfig_dep, pixbuf_dep, epoxy_dep, libm, graphene_dep, ] if x11_enabled x11_data_prefix = dependency('x11').get_variable(pkgconfig: 'prefix') gtk_cargs += [ '-DX11_DATA_PREFIX="@0@"'.format(x11_data_prefix), ] gtk_sources += gtk_x11_sources gtk_deps += [ xi_dep, x11_dep, ] endif if wayland_enabled gtk_sources += gtk_wayland_sources endif if broadway_enabled gtk_sources += ['gtkimcontextbroadway.c'] endif if win32_enabled gtk_cargs += ['-DGTK_PRINT_BACKENDS="file,lpr"'] gtk_deps += [ giowin32_dep, pangowin32_dep ] gtk_deps += [ cc.find_library('advapi32'), cc.find_library('comctl32'), cc.find_library('crypt32'), # For CryptProtectMemory() cc.find_library('dwmapi'), cc.find_library('imm32'), cc.find_library('setupapi'), cc.find_library('winmm'), ] gtkwin32rc = configure_file(input: 'gtk-win32.rc.body.in', output: 'gtk-win32.rc.body', configuration: gtkversion_cdata, ) win32_manifest = configure_file(input: 'libgtk4.manifest.in', output: 'libgtk4.manifest', configuration: gtkversion_cdata, ) win32res = import('windows').compile_resources(gtkwin32rc, include_directories: win32rcinc) gtk_sources += win32res endif # So we don't add these twice if x11_enabled or wayland_enabled gtk_sources += gtk_use_wayland_or_x11_c_sources endif if pangoft_dep.found() gtk_deps += pangoft_dep endif if macos_enabled gtk_macos_frameworks = [ 'AppKit', 'Foundation', ] gtk_deps += [dependency('appleframeworks', modules: gtk_macos_frameworks)] endif gtk_deps += cloudproviders_dep if os_unix gtk_deps += tracker3_dep endif # Unconditional. If libintl isn't found, # the object just does nothing being in the deplist gtk_deps += libintl_dep gtk_settings_schemas = [ 'org.gtk.gtk4.Settings.FileChooser.gschema.xml', 'org.gtk.gtk4.Settings.ColorChooser.gschema.xml', 'org.gtk.gtk4.Settings.EmojiChooser.gschema.xml', 'org.gtk.gtk4.Settings.Debug.gschema.xml', ] install_data(gtk_settings_schemas, install_dir: gtk_schemasdir) gnome.compile_schemas(depend_files: files(gtk_settings_schemas), build_by_default: true) gtk_schema_build_dir = meson.current_build_dir() # Check for more things if cc.has_header('langinfo.h') foreach nl_enum: [ '_NL_MEASUREMENT_MEASUREMENT', '_NL_PAPER_HEIGHT', '_NL_PAPER_WIDTH', '_NL_TIME_FIRST_WEEKDAY', ] cdata.set('HAVE_' + nl_enum, cc.has_header_symbol('langinfo.h', nl_enum)) endforeach endif # Generate versions for macOS dylib darwin_versions = [ # compatibility version 1 + '@0@'.format(gtk_binary_age - gtk_interface_age).to_int(), # current version '@0@.@1@'.format(1 + '@0@'.format(gtk_binary_age - gtk_interface_age).to_int(), gtk_interface_age), ] # Library libgtk_static = static_library('gtk', sources: [typefuncs, gtk_sources, gtkmarshal_h, gtkprivatetypebuiltins_h, xdp_dbus_generated], c_args: gtk_cargs + common_cflags, include_directories: [confinc, gdkinc, gskinc, gtkinc], dependencies: gtk_deps + [libgtk_css_dep, libgdk_dep, libgsk_dep], link_with: [libgtk_css, libgdk, libgsk ], ) libgtk = shared_library('gtk-4', c_args: gtk_cargs + common_cflags, include_directories: [confinc, gdkinc, gskinc, gtkinc], dependencies: gtk_deps + [libgtk_css_dep, libgdk_dep, libgsk_dep], link_whole: [libgtk_static, libgtk_css, libgdk, libgsk ], link_args: common_ldflags, soversion: gtk_soversion, version: gtk_library_version, darwin_versions: darwin_versions, install: true, ) gtk_dep_sources = [gtkversion, gtktypebuiltins_h] # Introspection if build_gir gir_args = [ '-DGTK_COMPILATION', '--quiet', ] gdk_gir_inc = [ 'cairo-1.0', 'Gio-2.0', 'GdkPixbuf-2.0', 'Pango-1.0', 'PangoCairo-1.0' ] gdk_gir = gnome.generate_gir(libgtk, sources: gdk_public_headers + gdk_public_sources + [ gdkenum_h ], namespace: 'Gdk', nsversion: gtk_api_version, identifier_prefix: 'Gdk', symbol_prefix: 'gdk', export_packages: 'gtk4', includes: gdk_gir_inc, header: 'gdk/gdk.h', install: true, dependencies: libgdk_dep, extra_args: gir_args, fatal_warnings: get_option('werror'), ) gtk_dep_sources += gdk_gir if x11_enabled gdk_x11_gir = gnome.generate_gir(libgtk, sources: gdk_x11_public_headers + gdk_x11_public_sources, namespace: 'GdkX11', nsversion: gtk_api_version, identifier_prefix: 'Gdk', symbol_prefix: 'gdk', export_packages: 'gtk4-x11', includes: [ gdk_gir[0], 'xlib-2.0', ], install: true, dependencies: libgdk_dep, header: 'gdk/x11/gdkx.h', extra_args: gir_args, fatal_warnings: get_option('werror'), ) gtk_dep_sources += gdk_x11_gir endif if wayland_enabled gdk_wayland_gir = gnome.generate_gir(libgtk, sources: gdk_wayland_public_headers + gdk_wayland_sources, namespace: 'GdkWayland', nsversion: gtk_api_version, identifier_prefix: 'Gdk', symbol_prefix: 'gdk', export_packages: 'gtk4-wayland', includes: [ gdk_gir[0], ], install: true, dependencies: libgdk_dep, header: 'gdk/wayland/gdkwayland.h', extra_args: gir_args, fatal_warnings: get_option('werror'), ) gtk_dep_sources += gdk_wayland_gir endif if win32_enabled gdk_win32_gir = gnome.generate_gir(libgtk, sources: gdk_win32_public_headers + gdk_win32_public_sources, namespace: 'GdkWin32', nsversion: gtk_api_version, identifier_prefix: 'Gdk', symbol_prefix: 'gdk', export_packages: 'gtk4-win32', includes: [ gdk_gir[0], 'win32-1.0', ], install: true, dependencies: libgdk_dep, header: 'gdk/win32/gdkwin32.h', extra_args: gir_args, fatal_warnings: get_option('werror'), ) gtk_dep_sources += gdk_win32_gir endif gsk_gir_inc = [ gdk_gir[0], 'Graphene-1.0' ] gsk_gir = gnome.generate_gir(libgtk, sources: gsk_public_headers + gsk_public_sources + [ gskenum_h ], namespace: 'Gsk', nsversion: gtk_api_version, identifier_prefix: 'Gsk', symbol_prefix: 'gsk', export_packages: 'gtk4', includes: gsk_gir_inc, header: 'gsk/gsk.h', install: true, dependencies: libgsk_dep, extra_args: gir_args, fatal_warnings: get_option('werror'), ) gtk_dep_sources += gsk_gir gtk_introspection_sources = [ gtk_public_headers, gtk_public_sources, gtk_css_public_headers, gtk_css_public_sources, gtk_deprecated_headers, gtk_deprecated_sources, gtktypebuiltins_h, gtkversion, ] if os_unix gtk_introspection_sources += [ gtk_unix_print_headers, gtk_unix_print_sources ] endif if os_win32 gtk_introspection_sources += [ gtk_win32_print_headers, gtk_win32_print_sources ] endif gtk_gir = gnome.generate_gir(libgtk, sources: gtk_introspection_sources, namespace: 'Gtk', nsversion: gtk_api_version, identifier_prefix: 'Gtk', symbol_prefix: 'gtk', export_packages: 'gtk4', includes: [ gdk_gir[0], gsk_gir[0], ], header: 'gtk/gtk.h', install: true, dependencies: [gtk_deps, libgsk_dep], extra_args: gir_args, fatal_warnings: get_option('werror'), ) gtk_dep_sources += gtk_gir endif libgtk_dep = declare_dependency(sources: gtk_dep_sources, include_directories: [confinc, gtkinc], dependencies: gtk_deps + [libgtk_css_dep, libgdk_dep, libgsk_dep], link_with: libgtk, link_args: common_ldflags, ) libgtk_static_dep = declare_dependency(sources: gtk_dep_sources, include_directories: [confinc, gtkinc], dependencies: gtk_deps + [libgtk_css_dep, libgdk_dep, libgsk_dep], link_with: [libgtk_static, libgtk_css, libgdk, libgsk ], link_args: common_ldflags, ) subdir('compose')