| 
									
										
										
										
											2025-07-30 14:54:59 +08:00
										 |  |  |  | project('mango', ['c', 'cpp'],
 | 
					
						
							| 
									
										
										
										
											2025-08-06 11:49:04 +08:00
										 |  |  |  |   version : '0.8.1',
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | )
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | subdir('protocols')
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-25 20:06:20 +08:00
										 |  |  |  | is_nixos = false
 | 
					
						
							|  |  |  |  | os_release = run_command('cat', '/etc/os-release', check: false)
 | 
					
						
							|  |  |  |  | if os_release.returncode() == 0
 | 
					
						
							|  |  |  |  |     if os_release.stdout().contains('ID=nixos')
 | 
					
						
							|  |  |  |  |         is_nixos = true
 | 
					
						
							|  |  |  |  |     endif
 | 
					
						
							|  |  |  |  | endif
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | prefix = get_option('prefix')
 | 
					
						
							|  |  |  |  | sysconfdir = get_option('sysconfdir')
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # 如果 sysconfdir 以 prefix 开头,去掉 prefix
 | 
					
						
							| 
									
										
										
										
											2025-02-25 20:06:20 +08:00
										 |  |  |  | if sysconfdir.startswith(prefix) and not is_nixos
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  |   sysconfdir = sysconfdir.substring(prefix.length())
 | 
					
						
							| 
									
										
										
										
											2025-02-25 20:06:20 +08:00
										 |  |  |  |   # 确保 sysconfdir 是绝对路径
 | 
					
						
							|  |  |  |  |   if not sysconfdir.startswith('/')
 | 
					
						
							|  |  |  |  |     sysconfdir = '/' + sysconfdir
 | 
					
						
							|  |  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | endif
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # 打印调试信息,确认 sysconfdir 的值
 | 
					
						
							| 
									
										
										
										
											2025-02-25 20:06:20 +08:00
										 |  |  |  | # message('prefix: ' + prefix)
 | 
					
						
							|  |  |  |  | # message('sysconfdir: ' + sysconfdir)
 | 
					
						
							| 
									
										
										
										
											2025-02-04 13:36:44 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | cc = meson.get_compiler('c')
 | 
					
						
							|  |  |  |  | libm = cc.find_library('m')
 | 
					
						
							|  |  |  |  | xcb = dependency('xcb', required : get_option('xwayland'))
 | 
					
						
							|  |  |  |  | xlibs = dependency('xcb-icccm', required : get_option('xwayland'))
 | 
					
						
							|  |  |  |  | wayland_server_dep = dependency('wayland-server')
 | 
					
						
							| 
									
										
										
										
											2025-06-25 11:05:57 +08:00
										 |  |  |  | wlroots_dep = dependency('wlroots-0.19',version: '>=0.19.0')
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | xkbcommon_dep = dependency('xkbcommon')
 | 
					
						
							|  |  |  |  | libinput_dep = dependency('libinput')
 | 
					
						
							|  |  |  |  | libwayland_client_dep = dependency('wayland-client')
 | 
					
						
							| 
									
										
										
										
											2025-05-18 18:26:06 +08:00
										 |  |  |  | pcre2_dep = dependency('libpcre2-8')
 | 
					
						
							| 
									
										
										
										
											2025-06-25 11:05:57 +08:00
										 |  |  |  | libscenefx_dep = dependency('scenefx-0.4',version: '>=0.4.1')
 | 
					
						
							| 
									
										
										
										
											2025-06-14 09:29:12 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-01 09:17:37 +08:00
										 |  |  |  | # 获取 Git Commit Hash 和最新的 tag
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | git = find_program('git', required : false)
 | 
					
						
							|  |  |  |  | if git.found()
 | 
					
						
							| 
									
										
										
										
											2025-04-04 19:51:24 +08:00
										 |  |  |  |   commit_hash = run_command(git, 'rev-parse', '--short', 'HEAD', check : false).stdout().strip()
 | 
					
						
							|  |  |  |  |   latest_tag = run_command(git, 'describe', '--tags', '--abbrev=0', check : false).stdout().strip()
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | else
 | 
					
						
							|  |  |  |  |   commit_hash = 'unknown'
 | 
					
						
							| 
									
										
										
										
											2025-03-01 09:17:37 +08:00
										 |  |  |  |   latest_tag = meson.project_version()  # 如果 Git 不可用,使用默认版本号
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | endif
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-01 09:17:37 +08:00
										 |  |  |  | # 将 Commit Hash 和最新的 tag 添加到版本信息中
 | 
					
						
							|  |  |  |  | version_with_hash = '@0@(@1@)'.format(latest_tag, commit_hash)
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | # 定义编译参数
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | c_args = [
 | 
					
						
							|  |  |  |  |   '-g',
 | 
					
						
							|  |  |  |  |   '-Wno-unused-function',
 | 
					
						
							|  |  |  |  |   '-DWLR_USE_UNSTABLE',
 | 
					
						
							|  |  |  |  |   '-D_POSIX_C_SOURCE=200809L',
 | 
					
						
							| 
									
										
										
										
											2025-08-06 11:49:04 +08:00
										 |  |  |  |   '-DVERSION="@0@"'.format(version_with_hash),
 | 
					
						
							|  |  |  |  |   '-DSYSCONFDIR="@0@"'.format('/etc'),
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | ]
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-06 11:49:04 +08:00
										 |  |  |  | # 仅在 debug 选项启用时添加调试参数
 | 
					
						
							|  |  |  |  | if get_option('asan')
 | 
					
						
							|  |  |  |  |   c_args += [
 | 
					
						
							|  |  |  |  |     '-fsanitize=address',
 | 
					
						
							|  |  |  |  |     '-fno-omit-frame-pointer',
 | 
					
						
							|  |  |  |  |     '-fno-optimize-sibling-calls'
 | 
					
						
							|  |  |  |  |   ]
 | 
					
						
							|  |  |  |  | endif
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | if xcb.found() and xlibs.found()
 | 
					
						
							|  |  |  |  |   c_args += '-DXWAYLAND'
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | endif
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-06 11:49:04 +08:00
										 |  |  |  | # 链接参数(根据 debug 状态添加 ASAN)
 | 
					
						
							|  |  |  |  | link_args = []
 | 
					
						
							|  |  |  |  | if get_option('asan')
 | 
					
						
							|  |  |  |  |   link_args += '-fsanitize=address'
 | 
					
						
							|  |  |  |  | endif
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-30 14:54:59 +08:00
										 |  |  |  | executable('mango',
 | 
					
						
							|  |  |  |  |   'src/mango.c',
 | 
					
						
							| 
									
										
										
										
											2025-04-28 09:19:26 +08:00
										 |  |  |  |   'src/common/util.c',
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  |   wayland_sources,
 | 
					
						
							|  |  |  |  |   dependencies : [
 | 
					
						
							|  |  |  |  |     libm,
 | 
					
						
							|  |  |  |  |     xcb,
 | 
					
						
							|  |  |  |  |     xlibs,
 | 
					
						
							| 
									
										
										
										
											2025-06-14 09:29:12 +08:00
										 |  |  |  |     libscenefx_dep,
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  |     wayland_server_dep,
 | 
					
						
							|  |  |  |  |     wlroots_dep,
 | 
					
						
							|  |  |  |  |     xkbcommon_dep,
 | 
					
						
							|  |  |  |  |     libinput_dep,
 | 
					
						
							|  |  |  |  |     libwayland_client_dep,
 | 
					
						
							| 
									
										
										
										
											2025-05-18 18:26:06 +08:00
										 |  |  |  |     pcre2_dep,
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  |   ],
 | 
					
						
							|  |  |  |  |   install : true,
 | 
					
						
							| 
									
										
										
										
											2025-08-06 11:49:04 +08:00
										 |  |  |  |   c_args : c_args,
 | 
					
						
							|  |  |  |  |   link_args : link_args,
 | 
					
						
							| 
									
										
										
										
											2025-02-03 23:18:47 +08:00
										 |  |  |  | )
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-04 07:17:44 +08:00
										 |  |  |  | desktop_install_dir = join_paths(prefix, 'share/wayland-sessions')
 | 
					
						
							| 
									
										
										
										
											2025-07-30 14:54:59 +08:00
										 |  |  |  | install_data('mango.desktop', install_dir : desktop_install_dir)
 | 
					
						
							| 
									
										
										
										
											2025-02-23 21:37:59 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-25 13:04:54 +08:00
										 |  |  |  | # 安装 config.conf
 | 
					
						
							| 
									
										
										
										
											2025-07-30 14:54:59 +08:00
										 |  |  |  | install_data('config.conf', install_dir : join_paths(sysconfdir, 'mango'))
 |