diff --git a/.gitignore b/.gitignore index 3991c1d..6b7d4af 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,4 @@ Makefile* /doc # clang-format -/.clang-format +.clang-format diff --git a/CMakeLists.txt b/CMakeLists.txt index da2ea9b..1719f6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,11 +2,8 @@ cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR) # meta data set(META_PROJECT_NAME qtforkawesome) -set(META_PROJECT_VARNAME QT_FORK_AWESOME) -set(META_APP_NAME "Qt ForkAwesome") set(META_APP_AUTHOR "Martchus") set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}") -set(META_APP_DESCRIPTION "Library that bundles ForkAwesome for use within Qt applications") set(META_VERSION_MAJOR 0) set(META_VERSION_MINOR 0) set(META_VERSION_PATCH 1) @@ -16,72 +13,7 @@ set(META_PUBLIC_QT_MODULES Core Gui) set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION OFF) project(${META_PROJECT_NAME}) - -# add project files -set(HEADER_FILES renderer.h icon.h iconfwd.h utils.h) -set(SRC_FILES renderer.cpp utils.cpp) -set(QT_TESTS renderer) -set(DOC_FILES README.md) - -# find/download ForkAwesome's font file and icon definitions -set(FORK_AWESOME_VERSION - "1.2.0" - CACHE STRING "specifies the version of ForkAwesome") -set(FORK_AWESOME_REPO_URL "https://raw.githubusercontent.com/ForkAwesome/Fork-Awesome/${FORK_AWESOME_VERSION}") -set(FORK_AWESOME_FONT_FILE - "${FORK_AWESOME_REPO_URL}/fonts/forkawesome-webfont.woff2" - CACHE STRING "specifies the location of ForkAwesome's font file") -set(FORK_AWESOME_ICON_DEFINITIONS - "${FORK_AWESOME_REPO_URL}/src/icons/icons.yml" - CACHE STRING "specifies the location of ForkAwesome's icon definitions file") -set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/download") -file(MAKE_DIRECTORY "${DOWNLOAD_DIR}") -function (checkout_file VARIABLE) - if ("${${VARIABLE}}" MATCHES "http(s)?:.+") - get_filename_component(FILE_NAME "${${VARIABLE}}" NAME) - if (NOT EXISTS "${DOWNLOAD_DIR}/${FILE_NAME}") - message(STATUS "Downloading ${${VARIABLE}}") - file(DOWNLOAD "${${VARIABLE}}" "${DOWNLOAD_DIR}/${FILE_NAME}" SHOW_PROGRESS) - endif () - set("${VARIABLE}" - "${DOWNLOAD_DIR}/${FILE_NAME}" - PARENT_SCOPE) - elseif (NOT EXISTS "${${VARIABLE}}") - message(FATAL_ERROR "${VARIABLE} is set to \"${${VARIABLE}}\" which does not exist.") - endif () -endfunction () -checkout_file(FORK_AWESOME_FONT_FILE) -checkout_file(FORK_AWESOME_ICON_DEFINITIONS) - -# configure font file -get_filename_component(META_FONT_FILE_NAME "${FORK_AWESOME_FONT_FILE}" NAME) -set(META_CUSTOM_CONFIG - "#define META_FONT_FILE_NAME \"${META_FONT_FILE_NAME}\"\n#define META_FORK_AWESOME_VERSION \"${FORK_AWESOME_VERSION}\"\n" -) -set(RES_FILE_PATH "${CMAKE_CURRENT_BINARY_DIR}/font.qrc") -set(RES_FILE_DATA "${META_FONT_FILE_NAME}") -if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.14") - file(CREATE_LINK "${FORK_AWESOME_FONT_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${META_FONT_FILE_NAME}") -else () - file(COPY "${FORK_AWESOME_FONT_FILE}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") -endif () -file(WRITE "${RES_FILE_PATH}" "${RES_FILE_DATA}") -list(APPEND RES_FILES "${RES_FILE_PATH}") - -# create rule for generating header file -find_program(PERL perl) -set(GENERATED_HEADERS_PATH "${CMAKE_CURRENT_BINARY_DIR}/headers") -set(ICONS_HEADER_FILE "${GENERATED_HEADERS_PATH}/private/icons.h") -set(ID_MAPPING_HEADER_FILE "${GENERATED_HEADERS_PATH}/private/idmapping.h") -file(MAKE_DIRECTORY "${GENERATED_HEADERS_PATH}/private") -list(APPEND SRC_FILES "${ICONS_HEADER_FILE}" "${ID_MAPPING_HEADER_FILE}") -set(META_TIDY_EXCLUDE_REGEX ".*/headers/private.*") -add_custom_command( - OUTPUT "${ICONS_HEADER_FILE}" "${ID_MAPPING_HEADER_FILE}" - COMMAND "${PERL}" "${CMAKE_CURRENT_SOURCE_DIR}/scripts/yaml2enum.pl" "${FORK_AWESOME_ICON_DEFINITIONS}" - "${ICONS_HEADER_FILE}" "${ID_MAPPING_HEADER_FILE}" - DEPENDS "${FORK_AWESOME_ICON_DEFINITIONS}" - COMMENT "Icon header") +enable_testing() # find c++utilities and qtutilities set(CONFIGURATION_PACKAGE_SUFFIX @@ -92,33 +24,5 @@ set(CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES CACHE STRING "sets the suffix for qtutilities") find_package(c++utilities${CONFIGURATION_PACKAGE_SUFFIX} 5.5.0 REQUIRED) find_package(qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.3.0 REQUIRED) -use_cpp_utilities(ONLY_HEADERS VISIBILITY PUBLIC) -use_qt_utilities(ONLY_HEADERS VISIBILITY PRIVATE) -# use Qt Gui module -list(APPEND ADDITIONAL_QT_MODULES Gui) - -# include modules to apply configuration -include(BasicConfig) -include(QtConfig) -include(WindowsResources) -include(LibraryTarget) -include(Doxygen) -include(ConfigHeader) - -# configure test target -include(TestUtilities) -set(QT_TEST_LIBRARIES ${CPP_UTILITIES_LIB} ${META_TARGET_NAME}) -use_qt_module(LIBRARIES_VARIABLE "QT_TEST_LIBRARIES" PREFIX "${QT_PACKAGE_PREFIX}" MODULE "Test") -foreach (TEST ${QT_TESTS}) - configure_test_target(TEST_NAME "${TEST}_tests" SRC_FILES "tests/${TEST}.cpp" LIBRARIES "${QT_TEST_LIBRARIES}") -endforeach () - -# ensure generated header can be found during build -target_include_directories(${META_TARGET_NAME} PUBLIC $) - -# install generated header -install( - FILES "${ICONS_HEADER_FILE}" - DESTINATION "${INCLUDE_SUBDIR}/${META_PROJECT_NAME}/private" - COMPONENT header) +add_subdirectory(${META_PROJECT_NAME}) diff --git a/qtforkawesome/CMakeLists.txt b/qtforkawesome/CMakeLists.txt new file mode 100644 index 0000000..dfc5df7 --- /dev/null +++ b/qtforkawesome/CMakeLists.txt @@ -0,0 +1,102 @@ +# additional meta data +set(META_PROJECT_VARNAME QT_FORK_AWESOME) +set(META_APP_NAME "Qt ForkAwesome") +set(META_APP_DESCRIPTION "Library that bundles ForkAwesome for use within Qt applications") + +# add project files +set(HEADER_FILES renderer.h icon.h iconfwd.h utils.h) +set(SRC_FILES renderer.cpp utils.cpp) +set(QT_TESTS renderer) +set(DOC_FILES ../README.md) + +# find/download ForkAwesome's font file and icon definitions +set(FORK_AWESOME_VERSION + "1.2.0" + CACHE STRING "specifies the version of ForkAwesome") +set(FORK_AWESOME_REPO_URL "https://raw.githubusercontent.com/ForkAwesome/Fork-Awesome/${FORK_AWESOME_VERSION}") +set(FORK_AWESOME_FONT_FILE + "${FORK_AWESOME_REPO_URL}/fonts/forkawesome-webfont.woff2" + CACHE STRING "specifies the location of ForkAwesome's font file") +set(FORK_AWESOME_ICON_DEFINITIONS + "${FORK_AWESOME_REPO_URL}/src/icons/icons.yml" + CACHE STRING "specifies the location of ForkAwesome's icon definitions file") +set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/download") +file(MAKE_DIRECTORY "${DOWNLOAD_DIR}") +function (checkout_file VARIABLE) + if ("${${VARIABLE}}" MATCHES "http(s)?:.+") + get_filename_component(FILE_NAME "${${VARIABLE}}" NAME) + if (NOT EXISTS "${DOWNLOAD_DIR}/${FILE_NAME}") + message(STATUS "Downloading ${${VARIABLE}}") + file(DOWNLOAD "${${VARIABLE}}" "${DOWNLOAD_DIR}/${FILE_NAME}" SHOW_PROGRESS) + endif () + set("${VARIABLE}" + "${DOWNLOAD_DIR}/${FILE_NAME}" + PARENT_SCOPE) + elseif (NOT EXISTS "${${VARIABLE}}") + message(FATAL_ERROR "${VARIABLE} is set to \"${${VARIABLE}}\" which does not exist.") + endif () +endfunction () +checkout_file(FORK_AWESOME_FONT_FILE) +checkout_file(FORK_AWESOME_ICON_DEFINITIONS) + +# configure font file +get_filename_component(META_FONT_FILE_NAME "${FORK_AWESOME_FONT_FILE}" NAME) +set(META_CUSTOM_CONFIG + "#define META_FONT_FILE_NAME \"${META_FONT_FILE_NAME}\"\n#define META_FORK_AWESOME_VERSION \"${FORK_AWESOME_VERSION}\"\n" +) +set(RES_FILE_PATH "${CMAKE_CURRENT_BINARY_DIR}/font.qrc") +set(RES_FILE_DATA "${META_FONT_FILE_NAME}") +if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.14") + file(CREATE_LINK "${FORK_AWESOME_FONT_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${META_FONT_FILE_NAME}") +else () + file(COPY "${FORK_AWESOME_FONT_FILE}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +endif () +file(WRITE "${RES_FILE_PATH}" "${RES_FILE_DATA}") +list(APPEND RES_FILES "${RES_FILE_PATH}") + +# create rule for generating header file +find_program(PERL perl) +set(GENERATED_HEADERS_PATH "${CMAKE_CURRENT_BINARY_DIR}/headers") +set(ICONS_HEADER_FILE "${GENERATED_HEADERS_PATH}/private/icons.h") +set(ID_MAPPING_HEADER_FILE "${GENERATED_HEADERS_PATH}/private/idmapping.h") +file(MAKE_DIRECTORY "${GENERATED_HEADERS_PATH}/private") +list(APPEND SRC_FILES "${ICONS_HEADER_FILE}" "${ID_MAPPING_HEADER_FILE}") +set(META_TIDY_EXCLUDE_REGEX ".*/headers/private.*") +add_custom_command( + OUTPUT "${ICONS_HEADER_FILE}" "${ID_MAPPING_HEADER_FILE}" + COMMAND "${PERL}" "${CMAKE_CURRENT_SOURCE_DIR}/scripts/yaml2enum.pl" "${FORK_AWESOME_ICON_DEFINITIONS}" + "${ICONS_HEADER_FILE}" "${ID_MAPPING_HEADER_FILE}" + DEPENDS "${FORK_AWESOME_ICON_DEFINITIONS}" + COMMENT "Icon header") + +# use headers and CMake modules from c++utilities and qtutilities +use_cpp_utilities(ONLY_HEADERS VISIBILITY PUBLIC) +use_qt_utilities(ONLY_HEADERS VISIBILITY PRIVATE) + +# use Qt Gui module +list(APPEND ADDITIONAL_QT_MODULES Gui) + +# include modules to apply configuration +include(BasicConfig) +include(QtConfig) +include(WindowsResources) +include(LibraryTarget) +include(Doxygen) +include(ConfigHeader) + +# configure test target +include(TestUtilities) +set(QT_TEST_LIBRARIES ${CPP_UTILITIES_LIB} ${META_TARGET_NAME}) +use_qt_module(LIBRARIES_VARIABLE "QT_TEST_LIBRARIES" PREFIX "${QT_PACKAGE_PREFIX}" MODULE "Test") +foreach (TEST ${QT_TESTS}) + configure_test_target(TEST_NAME "${TEST}_tests" SRC_FILES "tests/${TEST}.cpp" LIBRARIES "${QT_TEST_LIBRARIES}") +endforeach () + +# ensure generated header can be found during build +target_include_directories(${META_TARGET_NAME} PUBLIC $) + +# install generated header +install( + FILES "${ICONS_HEADER_FILE}" + DESTINATION "${INCLUDE_SUBDIR}/${META_PROJECT_NAME}/private" + COMPONENT header) diff --git a/global.h b/qtforkawesome/global.h similarity index 100% rename from global.h rename to qtforkawesome/global.h diff --git a/icon.h b/qtforkawesome/icon.h similarity index 100% rename from icon.h rename to qtforkawesome/icon.h diff --git a/iconfwd.h b/qtforkawesome/iconfwd.h similarity index 100% rename from iconfwd.h rename to qtforkawesome/iconfwd.h diff --git a/renderer.cpp b/qtforkawesome/renderer.cpp similarity index 100% rename from renderer.cpp rename to qtforkawesome/renderer.cpp diff --git a/renderer.h b/qtforkawesome/renderer.h similarity index 100% rename from renderer.h rename to qtforkawesome/renderer.h diff --git a/scripts/yaml2enum.pl b/qtforkawesome/scripts/yaml2enum.pl similarity index 100% rename from scripts/yaml2enum.pl rename to qtforkawesome/scripts/yaml2enum.pl diff --git a/tests/renderer.cpp b/qtforkawesome/tests/renderer.cpp similarity index 100% rename from tests/renderer.cpp rename to qtforkawesome/tests/renderer.cpp diff --git a/utils.cpp b/qtforkawesome/utils.cpp similarity index 100% rename from utils.cpp rename to qtforkawesome/utils.cpp diff --git a/utils.h b/qtforkawesome/utils.h similarity index 100% rename from utils.h rename to qtforkawesome/utils.h