Skip to content

Commit c160b01

Browse files
committed
add in cmake find package system
1 parent 2ae2362 commit c160b01

File tree

3 files changed

+63
-28
lines changed

3 files changed

+63
-28
lines changed

CMakeLists.txt

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
# CMake configuration for SinesBox library
2-
31
cmake_minimum_required(VERSION 3.10)
42
project(SinesBox VERSION 1.0.0 LANGUAGES CXX)
53

64
# Set the C++ standard
75
set(CMAKE_CXX_STANDARD 17)
86
set(CMAKE_CXX_STANDARD_REQUIRED True)
97

10-
# Define the library sources
8+
# Define the library sources and headers
119
set(SINESBOX_SOURCES
1210
src/SinesBox.cpp
1311
)
@@ -18,16 +16,41 @@ set(SINESBOX_HEADERS
1816
)
1917

2018
# Create the library
21-
add_library(SinesBox STATIC ${SINESBOX_SOURCES} ${SINESBOX_HEADERS})
19+
add_library(SinesBox STATIC ${SINESBOX_SOURCES})
2220

2321
# Set the include directory for this target
24-
target_include_directories(SinesBox PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
22+
target_include_directories(SinesBox
23+
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
24+
$<INSTALL_INTERFACE:include>
25+
)
2526

2627
# Installation configuration
2728
install(TARGETS SinesBox
29+
EXPORT SinesBoxTargets
2830
ARCHIVE DESTINATION lib
2931
LIBRARY DESTINATION lib
3032
RUNTIME DESTINATION bin
3133
)
3234

35+
# Install headers
3336
install(FILES ${SINESBOX_HEADERS} DESTINATION include/SinesBox)
37+
38+
# Export the library for use by other projects
39+
install(EXPORT SinesBoxTargets
40+
FILE SinesBoxConfig.cmake
41+
NAMESPACE SinesBox::
42+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SinesBox
43+
)
44+
45+
# Generate a package version file for CMake
46+
include(CMakePackageConfigHelpers)
47+
write_basic_package_version_file(
48+
"${CMAKE_CURRENT_BINARY_DIR}/SinesBoxConfigVersion.cmake"
49+
VERSION ${PROJECT_VERSION}
50+
COMPATIBILITY SameMajorVersion
51+
)
52+
53+
# Install the package version file
54+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SinesBoxConfigVersion.cmake"
55+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SinesBox
56+
)

include/SinesBox.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ namespace SinesBoxLib {
1919
void setText(const std::string& text);
2020
void setBorderColor(const std::string& color);
2121
void setTextColor(const std::string& color);
22-
void setBackgroundColor(const std::string& color);
22+
void setBorderBackgroundColor(const std::string& color);
23+
void setTextBackgroundColor(const std::string& color);
2324
void setBorderBold(bool bold);
2425
void setTextBold(bool bold);
2526
void draw();
@@ -37,6 +38,8 @@ namespace SinesBoxLib {
3738
std::string border_color;
3839
std::string text_color;
3940
std::string background_color;
41+
std::string border_background_color;
42+
std::string text_background_color;
4043

4144
// Style flags
4245
bool is_border_bold;

src/SinesBox.cpp

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ namespace SinesBoxLib {
2525
border_color("white"),
2626
text_color("white"),
2727
background_color(""),
28+
border_background_color(""),
29+
text_background_color(""),
2830
is_border_bold(false),
2931
is_text_bold(false) {
3032

@@ -159,9 +161,16 @@ namespace SinesBoxLib {
159161
}
160162
}
161163

162-
void SinesBox::setBackgroundColor(const std::string& color) {
164+
165+
void SinesBox::setBorderBackgroundColor(const std::string& color) {
166+
if (colors.count(color)) {
167+
border_background_color = color;
168+
}
169+
}
170+
171+
void SinesBox::setTextBackgroundColor(const std::string& color) {
163172
if (colors.count(color)) {
164-
background_color = color;
173+
text_background_color = color;
165174
}
166175
}
167176

@@ -178,24 +187,24 @@ namespace SinesBoxLib {
178187
if (text_lines.empty()) return;
179188

180189
// Draw top border
181-
std::cout << colorize(corner_tl, border_color, background_color, is_border_bold);
182-
std::cout << colorize(repeat(horizontal, terminal_width - 2), border_color, background_color, is_border_bold);
183-
std::cout << colorize(corner_tr, border_color, background_color, is_border_bold) << "\n";
190+
std::cout << colorize(corner_tl, border_color, border_background_color, is_border_bold);
191+
std::cout << colorize(repeat(horizontal, terminal_width - 2), border_color, border_background_color, is_border_bold);
192+
std::cout << colorize(corner_tr, border_color, border_background_color, is_border_bold) << "\n";
184193

185194
// Draw text lines with borders
186195
for (const auto& line : text_lines) {
187-
std::cout << colorize(vertical, border_color, background_color, is_border_bold) << " ";
188-
std::cout << colorize(line, text_color, background_color, is_text_bold);
196+
std::cout << colorize(vertical, border_color, border_background_color, is_border_bold) << " ";
197+
std::cout << colorize(line, text_color, text_background_color, is_text_bold);
189198

190199
int padding = terminal_width - line.length() - 4;
191-
std::cout << colorize(std::string(padding, ' ') + " ", text_color, background_color);
192-
std::cout << colorize(vertical, border_color, background_color, is_border_bold) << "\n";
200+
std::cout << colorize(std::string(padding, ' ') + " ", text_color, text_background_color);
201+
std::cout << colorize(vertical, border_color, border_background_color, is_border_bold) << "\n";
193202
}
194203

195204
// Draw bottom border
196-
std::cout << colorize(corner_bl, border_color, background_color, is_border_bold);
197-
std::cout << colorize(repeat(horizontal, terminal_width - 2), border_color, background_color, is_border_bold);
198-
std::cout << colorize(corner_br, border_color, background_color, is_border_bold) << "\n";
205+
std::cout << colorize(corner_bl, border_color, border_background_color, is_border_bold);
206+
std::cout << colorize(repeat(horizontal, terminal_width - 2), border_color, border_background_color, is_border_bold);
207+
std::cout << colorize(corner_br, border_color, border_background_color, is_border_bold) << "\n";
199208
}
200209

201210
void SinesBox::drawRainbow() {
@@ -207,40 +216,40 @@ namespace SinesBoxLib {
207216
size_t color_idx = 0;
208217

209218
// Draw top border
210-
std::cout << colorize(corner_tl, rainbow_colors[0], background_color, true);
219+
std::cout << colorize(corner_tl, rainbow_colors[0], border_background_color, true);
211220
for (int i = 0; i < terminal_width - 2; i++) {
212221
std::cout << colorize(horizontal,
213222
rainbow_colors[(i / 3) % rainbow_colors.size()],
214-
background_color, true);
223+
border_background_color, true);
215224
}
216225
std::cout << colorize(corner_tr,
217226
rainbow_colors[(terminal_width - 2) / 3 % rainbow_colors.size()],
218-
background_color, true) << "\n";
227+
border_background_color, true) << "\n";
219228

220229
// Draw text lines
221230
for (size_t i = 0; i < text_lines.size(); i++) {
222231
const auto& line = text_lines[i];
223232
color_idx = i % rainbow_colors.size();
224233

225-
std::cout << colorize(vertical, rainbow_colors[color_idx], background_color, true) << " ";
226-
std::cout << colorize(line, rainbow_colors[color_idx], background_color, true);
234+
std::cout << colorize(vertical, rainbow_colors[color_idx], border_background_color, true) << " ";
235+
std::cout << colorize(line, rainbow_colors[color_idx], text_background_color, true);
227236

228237
int padding = terminal_width - line.length() - 4;
229238
std::string padding_str(padding + 1, ' ');
230-
std::cout << colorize(padding_str, rainbow_colors[color_idx], background_color, true);
231-
std::cout << colorize(vertical, rainbow_colors[color_idx], background_color, true) << "\n";
239+
std::cout << colorize(padding_str, rainbow_colors[color_idx], text_background_color, true);
240+
std::cout << colorize(vertical, rainbow_colors[color_idx], border_background_color, true) << "\n";
232241
}
233242

234243
// Draw bottom border
235244
color_idx = text_lines.size() % rainbow_colors.size();
236-
std::cout << colorize(corner_bl, rainbow_colors[color_idx], background_color, true);
245+
std::cout << colorize(corner_bl, rainbow_colors[color_idx], border_background_color, true);
237246
for (int i = 0; i < terminal_width - 2; i++) {
238247
std::cout << colorize(horizontal,
239248
rainbow_colors[(i / 3 + color_idx) % rainbow_colors.size()],
240-
background_color, true);
249+
border_background_color, true);
241250
}
242251
std::cout << colorize(corner_br,
243252
rainbow_colors[(terminal_width - 2) / 3 + color_idx % rainbow_colors.size()],
244-
background_color, true) << "\n";
253+
border_background_color, true) << "\n";
245254
}
246255
}

0 commit comments

Comments
 (0)