1de301c82Smrg# SPDX-License-Identifier: MIT 2de301c82Smrg# 3de301c82Smrg# Copyright (c) 2025, Oracle and/or its affiliates. 4de301c82Smrg# 5de301c82Smrg# Permission is hereby granted, free of charge, to any person obtaining a 6de301c82Smrg# copy of this software and associated documentation files (the "Software"), 7de301c82Smrg# to deal in the Software without restriction, including without limitation 8de301c82Smrg# the rights to use, copy, modify, merge, publish, distribute, sublicense, 9de301c82Smrg# and/or sell copies of the Software, and to permit persons to whom the 10de301c82Smrg# Software is furnished to do so, subject to the following conditions: 11de301c82Smrg# 12de301c82Smrg# The above copyright notice and this permission notice (including the next 13de301c82Smrg# paragraph) shall be included in all copies or substantial portions of the 14de301c82Smrg# Software. 15de301c82Smrg# 16de301c82Smrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17de301c82Smrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18de301c82Smrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19de301c82Smrg# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20de301c82Smrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21de301c82Smrg# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22de301c82Smrg# DEALINGS IN THE SOFTWARE. 23de301c82Smrg# 24de301c82Smrg 25de301c82Smrg# 26de301c82Smrg# This is the package version number, not the shared library 27de301c82Smrg# version. This version number will be substituted into Xft.h 28de301c82Smrg# Please bump the minor library number at each release as well. 29de301c82Smrg# 30de301c82Smrgproject( 31de301c82Smrg 'libXft', 32de301c82Smrg 'c', 33de301c82Smrg version: '2.3.9', 34de301c82Smrg license: 'HPND-sell-variant', 35de301c82Smrg license_files: 'COPYING', 36de301c82Smrg meson_version: '>= 1.1.0', 37de301c82Smrg) 38de301c82Smrg 39de301c82Smrg# Replacement for XORG_DEFAULT_OPTIONS 40de301c82Smrgcc = meson.get_compiler('c') 41de301c82Smrgif cc.has_argument('-fno-strict-aliasing') 42de301c82Smrg add_project_arguments('-fno-strict-aliasing', language: 'c') 43de301c82Smrgendif 44de301c82Smrg 45de301c82Smrg# Make builds reproducible instead of embedding build paths due to use 46de301c82Smrg# of __FILE__ in the assert() macro 47de301c82Smrgfs = import('fs') 48de301c82Smrgsource_prefix_path = fs.relative_to( 49de301c82Smrg meson.project_source_root(), 50de301c82Smrg meson.project_build_root() 51de301c82Smrg) 52de301c82Smrgmacro_prefix_map = '-fmacro-prefix-map=' + source_prefix_path + '/src/=' 53de301c82Smrgif cc.has_argument(macro_prefix_map) 54de301c82Smrg add_project_arguments(macro_prefix_map, language: 'c') 55de301c82Smrgendif 56de301c82Smrg 57de301c82Smrgprog_sed = find_program('sed') 58de301c82Smrg 59de301c82Smrg# Set library version for Xft.h from package version set above 60de301c82Smrgxft_version = meson.project_version() 61de301c82Smrgxft_vers_components = xft_version.split('.') 62de301c82Smrgxft_vers_conf = configuration_data() 63de301c82Smrgxft_vers_conf.set('XFT_MAJOR', xft_vers_components[0], 64de301c82Smrg description: 'Major version of Xft') 65de301c82Smrgxft_vers_conf.set('XFT_MINOR', xft_vers_components[1], 66de301c82Smrg description: 'Minor version of Xft') 67de301c82Smrgxft_vers_conf.set('XFT_REVISION', xft_vers_components[2], 68de301c82Smrg description: 'Micro revision of Xft') 69de301c82Smrg# Temporary solution to allow building with either autoconf or meson 70de301c82Smrg# during the transition period - can be replaced by configure_file() 71de301c82Smrg# and use of '#mesondefine' when configure.ac is removed. 72de301c82Smrgxft_h = custom_target( 73de301c82Smrg input: 'include/X11/Xft/Xft.h.in', 74de301c82Smrg output: 'Xft.h', 75de301c82Smrg command: [ 76de301c82Smrg prog_sed, 77de301c82Smrg '-e', f's/#undef XFT_MAJOR/#define XFT_MAJOR @0@/'.format(xft_vers_conf.get('XFT_MAJOR')), 78de301c82Smrg '-e', f's/#undef XFT_MINOR/#define XFT_MINOR @0@/'.format(xft_vers_conf.get('XFT_MINOR')), 79de301c82Smrg '-e', f's/#undef XFT_REVISION/#define XFT_REVISION @0@/'.format(xft_vers_conf.get('XFT_REVISION')), 80de301c82Smrg '@INPUT@', 81de301c82Smrg ], 82de301c82Smrg capture: true, 83de301c82Smrg install: true, 84de301c82Smrg install_dir: get_option('prefix') / get_option('includedir') / 'X11/Xft' 85de301c82Smrg) 86de301c82Smrg 87de301c82Smrg 88de301c82Smrg# Check for Xrender 89de301c82Smrgdep_xrender = dependency('xrender', required: true, version: '>= 0.8.2') 90de301c82Smrgdep_libx11 = dependency('x11', required: true) 91de301c82Smrgdep_xproto = dependency('xproto', required: true, version: '>= 7.0.22') 92de301c82Smrg 93de301c82Smrg# Check freetype configuration 94de301c82Smrgdep_freetype = dependency('freetype2', required: true, version: '>= 2.1.6') 95de301c82Smrg 96de301c82Smrg# Check fontconfig configuration 97de301c82Smrgdep_fontconfig = dependency('fontconfig', required: true, version: '>= 2.5.92') 98de301c82Smrg 99de301c82SmrglibXft_sources = [ 100de301c82Smrg 'src/xftcolor.c', 101de301c82Smrg 'src/xftcore.c', 102de301c82Smrg 'src/xftdbg.c', 103de301c82Smrg 'src/xftdpy.c', 104de301c82Smrg 'src/xftdraw.c', 105de301c82Smrg 'src/xftextent.c', 106de301c82Smrg 'src/xftfont.c', 107de301c82Smrg 'src/xftfreetype.c', 108de301c82Smrg 'src/xftglyphs.c', 109de301c82Smrg 'src/xftinit.c', 110de301c82Smrg 'src/xftlist.c', 111de301c82Smrg 'src/xftname.c', 112de301c82Smrg 'src/xftrender.c', 113de301c82Smrg 'src/xftstr.c', 114de301c82Smrg 'src/xftswap.c', 115de301c82Smrg 'src/xftxlfd.c' 116de301c82Smrg] 117de301c82Smrg 118de301c82Smrglib = library( 119de301c82Smrg 'Xft', 120de301c82Smrg libXft_sources, 121de301c82Smrg include_directories: 'include/X11/Xft', 122de301c82Smrg dependencies: [dep_fontconfig, dep_freetype, dep_xrender, dep_libx11, 123de301c82Smrg dep_xproto], 124de301c82Smrg sources: xft_h, 125de301c82Smrg version: xft_version, 126de301c82Smrg install: true, 127de301c82Smrg) 128de301c82Smrg 129de301c82Smrginstall_headers( 130de301c82Smrg 'include/X11/Xft/XftCompat.h', 131de301c82Smrg subdir: 'X11/Xft', 132de301c82Smrg) 133de301c82Smrg 134de301c82Smrgpkg = import('pkgconfig') 135de301c82Smrgpkg.generate( 136de301c82Smrg name: 'Xft', 137de301c82Smrg description: 'X FreeType library', 138de301c82Smrg filebase: 'xft', 139de301c82Smrg libraries: '-L${libdir} -lXft', 140de301c82Smrg requires: ['xproto'], 141de301c82Smrg requires_private: ['xrender', 'fontconfig', 'freetype2'], 142de301c82Smrg url: 'https://gitlab.freedesktop.org/xorg/lib/libxft/' 143de301c82Smrg) 144de301c82Smrg 145de301c82Smrglib_man_suffix = get_option('lib_man_suffix') 146de301c82Smrg 147de301c82Smrgcustom_target( 148de301c82Smrg input: 'man/Xft.man', 149de301c82Smrg output: f'Xft.@lib_man_suffix@', 150de301c82Smrg command: [ 151de301c82Smrg prog_sed, 152de301c82Smrg '-e', f's/__libmansuffix__/@lib_man_suffix@/g', 153de301c82Smrg '-e', 's/__vendorversion__/"libXft @0@" "X Version 11"/'.format(meson.project_version()), 154de301c82Smrg '@INPUT@', 155de301c82Smrg ], 156de301c82Smrg capture: true, 157de301c82Smrg install: true, 158de301c82Smrg install_dir: get_option('prefix') / get_option('mandir') / f'man@lib_man_suffix@', 159de301c82Smrg) 160de301c82Smrg 161de301c82Smrgshadow_man_pages = [ 162de301c82Smrg 'XftCharExists', 163de301c82Smrg 'XftCharFontSpecRender', 164de301c82Smrg 'XftCharIndex', 165de301c82Smrg 'XftCharSpecRender', 166de301c82Smrg 'XftColorAllocName', 167de301c82Smrg 'XftColorAllocValue', 168de301c82Smrg 'XftColorFree', 169de301c82Smrg 'XftDefaultHasRender', 170de301c82Smrg 'XftDefaultSet', 171de301c82Smrg 'XftDefaultSubstitute', 172de301c82Smrg 'XftDrawChange', 173de301c82Smrg 'XftDrawCharFontSpec', 174de301c82Smrg 'XftDrawCharSpec', 175de301c82Smrg 'XftDrawColormap', 176de301c82Smrg 'XftDrawCreate', 177de301c82Smrg 'XftDrawCreateAlpha', 178de301c82Smrg 'XftDrawCreateBitmap', 179de301c82Smrg 'XftDrawDestroy', 180de301c82Smrg 'XftDrawDisplay', 181de301c82Smrg 'XftDrawDrawable', 182de301c82Smrg 'XftDrawGlyphFontSpec', 183de301c82Smrg 'XftDrawGlyphSpec', 184de301c82Smrg 'XftDrawGlyphs', 185de301c82Smrg 'XftDrawPicture', 186de301c82Smrg 'XftDrawRect', 187de301c82Smrg 'XftDrawSetClip', 188de301c82Smrg 'XftDrawSetClipRectangles', 189de301c82Smrg 'XftDrawSetSubwindowMode', 190de301c82Smrg 'XftDrawSrcPicture', 191de301c82Smrg 'XftDrawString16', 192de301c82Smrg 'XftDrawString32', 193de301c82Smrg 'XftDrawString8', 194de301c82Smrg 'XftDrawStringUtf16', 195de301c82Smrg 'XftDrawStringUtf8', 196de301c82Smrg 'XftDrawVisual', 197de301c82Smrg 'XftFontCheckGlyph', 198de301c82Smrg 'XftFontClose', 199de301c82Smrg 'XftFontCopy', 200de301c82Smrg 'XftFontInfoCreate', 201de301c82Smrg 'XftFontInfoDestroy', 202de301c82Smrg 'XftFontInfoEqual', 203de301c82Smrg 'XftFontInfoHash', 204de301c82Smrg 'XftFontLoadGlyphs', 205de301c82Smrg 'XftFontMatch', 206de301c82Smrg 'XftFontOpen', 207de301c82Smrg 'XftFontOpenInfo', 208de301c82Smrg 'XftFontOpenName', 209de301c82Smrg 'XftFontOpenPattern', 210de301c82Smrg 'XftFontOpenXlfd', 211de301c82Smrg 'XftFontUnloadGlyphs', 212de301c82Smrg 'XftGetVersion', 213de301c82Smrg 'XftGlyphExtents', 214de301c82Smrg 'XftGlyphFontSpecRender', 215de301c82Smrg 'XftGlyphRender', 216de301c82Smrg 'XftGlyphSpecRender', 217de301c82Smrg 'XftInit', 218de301c82Smrg 'XftInitFtLibrary', 219de301c82Smrg 'XftListFonts', 220de301c82Smrg 'XftLockFace', 221de301c82Smrg 'XftNameParse', 222de301c82Smrg 'XftNameUnparse', 223de301c82Smrg 'XftTextExtents16', 224de301c82Smrg 'XftTextExtents32', 225de301c82Smrg 'XftTextExtents8', 226de301c82Smrg 'XftTextExtentsUtf16', 227de301c82Smrg 'XftTextExtentsUtf8', 228de301c82Smrg 'XftTextRender16', 229de301c82Smrg 'XftTextRender16BE', 230de301c82Smrg 'XftTextRender16LE', 231de301c82Smrg 'XftTextRender32', 232de301c82Smrg 'XftTextRender32BE', 233de301c82Smrg 'XftTextRender32LE', 234de301c82Smrg 'XftTextRender8', 235de301c82Smrg 'XftTextRenderUtf16', 236de301c82Smrg 'XftTextRenderUtf8', 237de301c82Smrg 'XftUnlockFace', 238de301c82Smrg 'XftXlfdParse' 239de301c82Smrg] 240de301c82Smrg 241de301c82Smrgforeach man: shadow_man_pages 242de301c82Smrg custom_target( 243de301c82Smrg output: f'@man@.@lib_man_suffix@', 244de301c82Smrg command: ['echo', f'.so man@lib_man_suffix@/Xft.@lib_man_suffix@'], 245de301c82Smrg capture: true, 246de301c82Smrg install: true, 247de301c82Smrg install_dir: get_option('prefix') / get_option('mandir') / f'man@lib_man_suffix@', 248de301c82Smrg ) 249de301c82Smrgendforeach 250