-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
120 lines (104 loc) · 3.86 KB
/
Copy pathCMakeLists.txt
File metadata and controls
120 lines (104 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# ShellBar v1.9.0 — A command-bar terminal emulator built on libghostty-vt
# Copyright (c) 2026 Xavier Araque <xavieraraque@gmail.com>
# MIT License
cmake_minimum_required(VERSION 3.19)
project(shellbar C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK4 REQUIRED gtk4)
pkg_check_modules(ADW REQUIRED libadwaita-1)
pkg_check_modules(PANGO REQUIRED pango)
pkg_check_modules(CAIRO REQUIRED cairo)
set(ZIG_VERSION_REQUIRED "0.15.2")
set(ZIG_DIR "${CMAKE_BINARY_DIR}/zig-x86_64-linux-${ZIG_VERSION_REQUIRED}")
set(ZIG_EXECUTABLE "${ZIG_DIR}/zig" CACHE FILEPATH "Path to Zig compiler")
set(ZIG_NEED_DOWNLOAD TRUE CACHE BOOL "Whether to download Zig")
find_program(SYSTEM_ZIG zig)
if(SYSTEM_ZIG)
execute_process(
COMMAND "${SYSTEM_ZIG}" version
OUTPUT_VARIABLE SYSTEM_ZIG_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
if(SYSTEM_ZIG_VERSION STREQUAL ZIG_VERSION_REQUIRED)
set(ZIG_EXECUTABLE "${SYSTEM_ZIG}" CACHE FILEPATH "Path to Zig compiler" FORCE)
set(ZIG_NEED_DOWNLOAD FALSE)
message(STATUS "Using system Zig ${ZIG_VERSION_REQUIRED}")
endif()
endif()
if(ZIG_NEED_DOWNLOAD)
if(NOT EXISTS "${ZIG_DIR}/zig")
set(ZIG_TARBALL "zig-x86_64-linux-${ZIG_VERSION_REQUIRED}.tar.xz")
set(ZIG_URL "https://ziglang.org/download/${ZIG_VERSION_REQUIRED}/${ZIG_TARBALL}")
set(ZIG_ARCHIVE "${CMAKE_BINARY_DIR}/${ZIG_TARBALL}")
message(STATUS "Downloading Zig ${ZIG_VERSION_REQUIRED} (ghostty requires this exact version)...")
file(DOWNLOAD "${ZIG_URL}" "${ZIG_ARCHIVE}"
STATUS ZIG_DOWNLOAD_STATUS SHOW_PROGRESS)
list(GET ZIG_DOWNLOAD_STATUS 0 ZIG_DOWNLOAD_EXIT_CODE)
if(NOT ZIG_DOWNLOAD_EXIT_CODE EQUAL 0)
list(GET ZIG_DOWNLOAD_STATUS 1 ZIG_DOWNLOAD_ERROR)
message(FATAL_ERROR "Failed to download Zig: ${ZIG_DOWNLOAD_ERROR}")
endif()
message(STATUS "Extracting Zig ${ZIG_VERSION_REQUIRED}...")
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xf "${ZIG_ARCHIVE}"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
RESULT_VARIABLE ZIG_EXTRACT_RESULT)
if(NOT ZIG_EXTRACT_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to extract Zig archive")
endif()
file(REMOVE "${ZIG_ARCHIVE}")
endif()
set(ZIG_EXECUTABLE "${ZIG_DIR}/zig" CACHE FILEPATH "Path to Zig compiler" FORCE)
message(STATUS "Using downloaded Zig ${ZIG_VERSION_REQUIRED}")
endif()
include(FetchContent)
FetchContent_Declare(ghostty
GIT_REPOSITORY https://github.com/ghostty-org/ghostty.git
GIT_TAG b0f8276658fbcc75318d2125d40146074a3fc505
)
FetchContent_MakeAvailable(ghostty)
add_executable(shellbar
shellbar.c
sb_window.c
sb_terminal.c
sb_toolbar.c
sb_config.c
sb_preferences_dialog.c
sb_theme.c
sb_indexer.c
)
file(GLOB ICON_FILES CONFIGURE_DEPENDS assets/icon-*.png assets/*.svg assets/logo.png)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/shellbar-resources.c
COMMAND glib-compile-resources
--target=${CMAKE_CURRENT_BINARY_DIR}/shellbar-resources.c
--generate-source
${CMAKE_CURRENT_SOURCE_DIR}/shellbar.gresource.xml
DEPENDS shellbar.gresource.xml
${ICON_FILES}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Compiling GResource: shellbar.gresource.xml"
)
target_sources(shellbar PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/shellbar-resources.c)
target_include_directories(shellbar PRIVATE
${ghostty_SOURCE_DIR}/include
${GTK4_INCLUDE_DIRS}
${ADW_INCLUDE_DIRS}
${PANGO_INCLUDE_DIRS}
${CAIRO_INCLUDE_DIRS}
)
target_link_libraries(shellbar PRIVATE
ghostty-vt
${GTK4_LIBRARIES}
${ADW_LIBRARIES}
${PANGO_LIBRARIES}
${CAIRO_LIBRARIES}
)
target_compile_options(shellbar PRIVATE
${GTK4_CFLAGS_OTHER}
${ADW_CFLAGS_OTHER}
)
if(UNIX AND NOT APPLE)
target_link_libraries(shellbar PRIVATE util)
endif()