build: replace generateVersion.sh (#12110)

* Implemented the CMake version of generateVersion.sh

* Made version.h.in compatible with the new build system and included version.h in helpers/MiscFunctions.cpp

* Deleted the scripts/generateVersion.sh as it's no longer needed

* Updated meson.build to match the new workflow

* Added an empty line between includes and namespaces that I accidentally removed
This commit is contained in:
nnra 2025-10-23 21:50:32 +02:00 committed by GitHub
parent 057695bc3f
commit 019589e23f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 119 additions and 94 deletions

View file

@ -9,7 +9,6 @@ project(
'optimization=3',
'buildtype=release',
'debug=false',
'b_lto=false',
'cpp_std=c++26',
],
meson_version: '>= 1.1.0',
@ -22,7 +21,8 @@ add_project_arguments(
'-Wno-unused-value',
'-Wno-missing-field-initializers',
'-Wno-narrowing',
'-Wno-pointer-arith', datarootdir,
'-Wno-pointer-arith',
datarootdir,
'-DHYPRLAND_VERSION="' + meson.project_version() + '"',
],
language: 'cpp',
@ -35,18 +35,55 @@ endif
aquamarine = dependency('aquamarine', version: '>=0.9.3')
hyprcursor = dependency('hyprcursor', version: '>=0.1.7')
hyprgraphics = dependency('hyprgraphics', version: '>= 0.1.6')
hyprlang = dependency('hyprlang', version: '>= 0.3.2')
hyprutils = dependency('hyprutils', version: '>= 0.8.2')
aquamarine_version_list = aquamarine.version().split('.')
add_project_arguments(['-DAQUAMARINE_VERSION="@0@"'.format(aquamarine.version())], language: 'cpp')
add_project_arguments(['-DAQUAMARINE_VERSION_MAJOR=@0@'.format(aquamarine_version_list.get(0))], language: 'cpp')
add_project_arguments(['-DAQUAMARINE_VERSION_MINOR=@0@'.format(aquamarine_version_list.get(1))], language: 'cpp')
add_project_arguments(['-DAQUAMARINE_VERSION_PATCH=@0@'.format(aquamarine_version_list.get(2))], language: 'cpp')
add_project_arguments(['-DHYPRCURSOR_VERSION="@0@"'.format(hyprcursor.version())], language: 'cpp')
add_project_arguments(['-DHYPRGRAPHICS_VERSION="@0@"'.format(hyprgraphics.version())], language: 'cpp')
add_project_arguments(['-DHYPRLANG_VERSION="@0@"'.format(hyprlang.version())], language: 'cpp')
add_project_arguments(['-DHYPRUTILS_VERSION="@0@"'.format(hyprutils.version())], language: 'cpp')
hyprgraphics = dependency('hyprgraphics', version: '>=0.1.6')
hyprlang = dependency('hyprlang', version: '>=0.3.2')
hyprutils = dependency('hyprutils', version: '>=0.8.2')
aq_ver_list = aquamarine.version().split('.')
git = find_program('git', required: false)
if git.found()
git_hash = run_command(git, 'rev-parse', 'HEAD').stdout().strip()
git_branch = run_command(git, 'branch', '--show-current').stdout().strip()
git_message = run_command(git, 'show', '-s', '--format=%s').stdout().strip()
git_date = run_command(git, 'show', '-s', '--format=%cd', '--date=local').stdout().strip()
git_dirty = run_command(git, 'diff-index', '--quiet', 'HEAD', '--', check: false).returncode() != 0 ? 'dirty' : 'clean'
git_tag = run_command(git, 'describe', '--tags').stdout().strip()
git_commits = run_command(git, 'rev-list', '--count', 'HEAD').stdout().strip()
else
git_hash = 'unknown'
git_branch = 'unknown'
git_message = 'unknown'
git_date = 'unknown'
git_dirty = 'unknown'
git_tag = 'unknown'
git_commits = '0'
endif
cfg = configuration_data()
cfg.set('GIT_COMMIT_HASH', git_hash)
cfg.set('GIT_BRANCH', git_branch)
cfg.set('GIT_COMMIT_MESSAGE', git_message)
cfg.set('GIT_COMMIT_DATE', git_date)
cfg.set('GIT_DIRTY', git_dirty)
cfg.set('GIT_TAG', git_tag)
cfg.set('GIT_COMMITS', git_commits)
cfg.set('AQUAMARINE_VERSION', aquamarine.version())
cfg.set('AQUAMARINE_VERSION_MAJOR', aq_ver_list[0])
cfg.set('AQUAMARINE_VERSION_MINOR', aq_ver_list[1])
cfg.set('AQUAMARINE_VERSION_PATCH', aq_ver_list[2])
cfg.set('HYPRLANG_VERSION', hyprlang.version())
cfg.set('HYPRUTILS_VERSION', hyprutils.version())
cfg.set('HYPRCURSOR_VERSION', hyprcursor.version())
cfg.set('HYPRGRAPHICS_VERSION', hyprgraphics.version())
version_h = configure_file(
input: 'src/version.h.in',
output: 'version.h',
configuration: cfg
)
install_headers(version_h, subdir: 'src')
xcb_dep = dependency('xcb', required: get_option('xwayland'))
xcb_composite_dep = dependency('xcb-composite', required: get_option('xwayland'))
@ -55,7 +92,6 @@ xcb_icccm_dep = dependency('xcb-icccm', required: get_option('xwayland'))
xcb_render_dep = dependency('xcb-render', required: get_option('xwayland'))
xcb_res_dep = dependency('xcb-res', required: get_option('xwayland'))
xcb_xfixes_dep = dependency('xcb-xfixes', required: get_option('xwayland'))
gio_dep = dependency('gio-2.0', required: true)
if not xcb_dep.found()
@ -63,18 +99,14 @@ if not xcb_dep.found()
endif
backtrace_dep = cpp_compiler.find_library('execinfo', required: false)
epoll_dep = dependency('epoll-shim', required: false) # timerfd on BSDs
inotify_dep = dependency('libinotify', required: false) # inotify on BSDs
epoll_dep = dependency('epoll-shim', required: false)
inotify_dep = dependency('libinotify', required: false)
re2 = dependency('re2', required: true)
# Handle options
systemd_option = get_option('systemd')
systemd = dependency('systemd', required: systemd_option)
systemd_option.enable_auto_if(systemd.found())
if (systemd_option.enabled())
message('Enabling systemd integration')
add_project_arguments('-DUSES_SYSTEMD', language: 'cpp')
subdir('systemd')
endif
@ -83,40 +115,31 @@ if get_option('buildtype') == 'debug'
add_project_arguments('-DHYPRLAND_DEBUG', language: 'cpp')
endif
# Generate hyprland version and populate version.h
run_command('sh', '-c', 'scripts/generateVersion.sh', check: true)
# Make shader files includable
run_command('sh', '-c', 'scripts/generateShaderIncludes.sh', check: true)
# Install headers
globber = run_command('find', 'src', '-name', '*.h*', '-o', '-name', '*.inc', check: true)
headers = globber.stdout().strip().split('\n')
foreach file : headers
install_headers(file, subdir: 'hyprland', preserve_path: true)
endforeach
install_headers(version_h, subdir: 'src')
tracy = dependency('tracy', static: true, required: get_option('tracy_enable'))
if get_option('tracy_enable') and get_option('buildtype') != 'debugoptimized'
warning('Profiling builds should set -- buildtype = debugoptimized')
endif
subdir('protocols')
subdir('src')
subdir('hyprctl')
subdir('assets')
subdir('example')
subdir('docs')
if get_option('hyprpm').enabled()
subdir('hyprpm/src')
endif
# Generate hyprland.pc
pkg_install_dir = join_paths(get_option('datadir'), 'pkgconfig')
import('pkgconfig').generate(
name: 'Hyprland',
filebase: 'hyprland',