Merge branch 'wip/fanc999/meson.msvc' into 'master'

GTK+ 4: Improve Windows/Visual Studio build experience

See merge request GNOME/gtk!185
This commit is contained in:
Chun-wei Fan 2019-02-23 02:13:35 +00:00
commit 8d987be673
7 changed files with 67 additions and 36 deletions

View File

@ -0,0 +1,33 @@
#!/usr/bin/env python
import os
import sys
import subprocess
if 'DESTDIR' not in os.environ:
gtk_api_version = sys.argv[1]
gtk_abi_version = sys.argv[2]
gtk_libdir = sys.argv[3].replace('/', os.sep)
gtk_datadir = sys.argv[4].replace('/', os.sep)
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
print('Compiling GSettings schemas...')
subprocess.call(['glib-compile-schemas',
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
print('Updating icon cache...')
subprocess.call(['gtk-update-icon-cache', '-q', '-t' ,'-f',
os.path.join(gtk_datadir, 'icons', 'hicolor')])
print('Updating module cache for print backends...')
if not os.path.isdir(gtk_printmodule_dir):
os.mkdir(gtk_printmodule_dir)
subprocess.call(['gio-querymodules', gtk_printmodule_dir])
print('Updating module cache for input methods...')
if not os.path.isdir(gtk_immodule_dir):
os.mkdir(gtk_immodule_dir)
subprocess.call(['gio-querymodules', gtk_immodule_dir])

View File

@ -1,26 +0,0 @@
#!/bin/sh
gtk_api_version=$1
gtk_abi_version=$2
gtk_libdir=$3
gtk_datadir=$4
# Package managers set this so we don't need to run
if [ -z "$DESTDIR" ]; then
echo Compiling GSettings schemas...
glib-compile-schemas ${gtk_datadir}/glib-2.0/schemas
echo Updating desktop database...
update-desktop-database -q ${gtk_datadir}/applications
echo Updating icon cache...
gtk-update-icon-cache -q -t -f ${gtk_datadir}/icons/hicolor
echo Updating module cache for print backends...
mkdir -p ${gtk_libdir}/gtk-4.0/4.0.0/printbackends
gio-querymodules ${gtk_libdir}/gtk-4.0/4.0.0/printbackends
echo Updating module cache for input methods...
mkdir -p ${gtk_libdir}/gtk-4.0/4.0.0/immodules
gio-querymodules ${gtk_libdir}/gtk-4.0/4.0.0/immodules
fi

View File

@ -160,6 +160,7 @@ gdkx11_inc = include_directories('x11')
gdkwayland_inc = include_directories('wayland') gdkwayland_inc = include_directories('wayland')
wlinc = include_directories('.') wlinc = include_directories('.')
win32rcinc = include_directories('win32/rc')
gdk_gen_headers = [gdkenum_h, gdkmarshal_h, gdkconfig, gdkversionmacros] gdk_gen_headers = [gdkenum_h, gdkmarshal_h, gdkconfig, gdkversionmacros]

View File

@ -1,3 +1,4 @@
#include <winuser.h>
#include <winver.h> #include <winver.h>
GTK_ICON ICON "gtk.ico" GTK_ICON ICON "gtk.ico"
@ -18,9 +19,9 @@ VS_VERSION_INFO VERSIONINFO
VALUE "CompanyName", "The GTK developer community" VALUE "CompanyName", "The GTK developer community"
VALUE "FileDescription", "GIMP Toolkit" VALUE "FileDescription", "GIMP Toolkit"
VALUE "FileVersion", "@GTK_VERSION@.0" VALUE "FileVersion", "@GTK_VERSION@.0"
VALUE "InternalName", "libgtk-win32-@GTK_API_VERSION@-@LT_CURRENT_MINUS_AGE@" VALUE "InternalName", "libgtk-win32-@GTK_API_VERSION@"
VALUE "LegalCopyright", "Copyright © 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald. Modified by the GTK+ Team and others 1997-2011." VALUE "LegalCopyright", "Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald. Modified by the GTK+ Team and others 1997-2011."
VALUE "OriginalFilename", "libgtk-win32-@GTK_API_VERSION@-@LT_CURRENT_MINUS_AGE@.dll" VALUE "OriginalFilename", "libgtk-win32-@GTK_API_VERSION@.dll"
VALUE "ProductName", "GTK+" VALUE "ProductName", "GTK+"
VALUE "ProductVersion", "@GTK_VERSION@" VALUE "ProductVersion", "@GTK_VERSION@"
END END
@ -30,3 +31,5 @@ VS_VERSION_INFO VERSIONINFO
VALUE "Translation", 0x409, 1200 VALUE "Translation", 0x409, 1200
END END
END END
ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST libgtk4.manifest

View File

@ -850,6 +850,12 @@ gtkversion_cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
gtkversion_cdata.set('GTK_MICRO_VERSION', gtk_micro_version) gtkversion_cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
gtkversion_cdata.set('GTK_BINARY_AGE', gtk_binary_age) gtkversion_cdata.set('GTK_BINARY_AGE', gtk_binary_age)
gtkversion_cdata.set('GTK_INTERFACE_AGE', gtk_interface_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', gtkversion = configure_file(input: 'gtkversion.h.in',
output: 'gtkversion.h', output: 'gtkversion.h',
@ -926,6 +932,17 @@ if win32_enabled
cc.find_library('imm32'), cc.find_library('imm32'),
cc.find_library('setupapi'), cc.find_library('setupapi'),
cc.find_library('winmm')] 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
else else
gtk_deps += [ atkbridge_dep, ] gtk_deps += [ atkbridge_dep, ]
endif endif

View File

@ -901,7 +901,7 @@ if get_option('documentation')
endif endif
# Keep this in sync with post-install.sh expected arguments # Keep this in sync with post-install.sh expected arguments
meson.add_install_script('build-aux/meson/post-install.sh', meson.add_install_script('build-aux/meson/post-install.py',
gtk_api_version, gtk_api_version,
gtk_binary_version, gtk_binary_version,
gtk_libdir, gtk_libdir,

View File

@ -23,6 +23,13 @@ endif
media_subdir = 'gtk-4.0/@0@/media'.format(gtk_binary_version) media_subdir = 'gtk-4.0/@0@/media'.format(gtk_binary_version)
media_install_dir = join_paths(get_option('libdir'), media_subdir) media_install_dir = join_paths(get_option('libdir'), media_subdir)
extra_c_args = ['-DGTK_COMPILATION']
# Detect and set symbol visibility
if cc.get_id() == 'msvc'
extra_c_args += ['-D_GLIB_EXTERN=__declspec (dllexport) extern']
endif
if media_backends.contains('ffmpeg') if media_backends.contains('ffmpeg')
libavfilter_dep = dependency('libavfilter', version: '>= 6.47.100', required: true) libavfilter_dep = dependency('libavfilter', version: '>= 6.47.100', required: true)
libavformat_dep = dependency('libavformat', version: '>= 57.41.100', required: true) libavformat_dep = dependency('libavformat', version: '>= 57.41.100', required: true)
@ -34,9 +41,7 @@ if media_backends.contains('ffmpeg')
shared_module('media-ffmpeg', shared_module('media-ffmpeg',
'gtkffmediafile.c', 'gtkffmediafile.c',
c_args: [ c_args: extra_c_args,
'-DGTK_COMPILATION'
],
dependencies: [ libgtk_dep, ffmpeg_deps ], dependencies: [ libgtk_dep, ffmpeg_deps ],
install_dir: media_install_dir, install_dir: media_install_dir,
install : true) install : true)
@ -50,9 +55,7 @@ if media_backends.contains('gstreamer')
'gtkgstmediafile.c', 'gtkgstmediafile.c',
'gtkgstpaintable.c', 'gtkgstpaintable.c',
'gtkgstsink.c', 'gtkgstsink.c',
c_args: [ c_args: extra_c_args,
'-DGTK_COMPILATION'
],
dependencies: [ libgtk_dep, gstplayer_dep ], dependencies: [ libgtk_dep, gstplayer_dep ],
install_dir: media_install_dir, install_dir: media_install_dir,
install : true) install : true)