diff --git a/.gitignore b/.gitignore index 850b9f0..86fef97 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ obj/ vcpkg_installed/ btcheck-cppcheck-build-dir/ *.iml +bt.rc \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index a2aa74f..c251439 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,13 +2,13 @@ cmake_minimum_required (VERSION 3.31) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FetchContent) -set(APP_NAME bt) -set(APP_LONG_NAME "Browser Tamer") -set(APP_URL "https://www.aloneguid.uk/projects/bt/") -set(APP_GITHUB_URL "https://github.com/aloneguid/bt") -set(APP_GITHUB_RELEASES_URL "https://github.com/aloneguid/bt/releases") -project ("BrowserTamer" VERSION 6.3.0 LANGUAGES CXX) +set(PROJECT_SLUG "bt") + +project ("Browser Tamer" + VERSION 6.3.2 + HOMEPAGE_URL "https://www.aloneguid.uk/projects/bt/" + LANGUAGES CXX) if(APPLE) enable_language(OBJCXX) @@ -21,6 +21,10 @@ if(WIN32) add_compile_definitions(NOMINMAX) # Windows SDK overrides those endif() +string(TIMESTAMP CURRENT_YEAR "%Y") +configure_file(globals.h.in ${CMAKE_CURRENT_BINARY_DIR}/globals.h @ONLY) +configure_file(bt.rc.in "${CMAKE_CURRENT_SOURCE_DIR}/bt.rc" @ONLY) + # statically link MSVC runtime in thrift to being fully self-contained. # this increases .exe size but guarantees working on all windows versions # see https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html @@ -55,94 +59,12 @@ FetchContent_Declare(grey #GIT_REPOSITORY git@github.com:aloneguid/grey.git GIT_REPOSITORY https://github.com/aloneguid/grey.git GIT_TAG 202610 + GIT_SHALLOW TRUE SOURCE_SUBDIR grey ) FetchContent_MakeAvailable(grey) -function (pre_build) - set(RELEASE_NOTES_FILE "${PROJECT_SOURCE_DIR}/docs/release-notes.md") - message(STATUS "reading from ${RELEASE_NOTES_FILE}") - - # version - file(STRINGS "${RELEASE_NOTES_FILE}" _first_line LIMIT_COUNT 1) - string(REGEX REPLACE "[ #]" "" RELEASE_VERSION "${_first_line}") - message(STATUS "version: ${RELEASE_VERSION}") - - # version variants - set(RELEASE_VERSION_FULL "${RELEASE_VERSION}.0") - string(REPLACE "." "," RELEASE_VERSION_COMMAS "${RELEASE_VERSION_FULL}") - message(STATUS "versions: [${RELEASE_VERSION}], [${RELEASE_VERSION_FULL}], [${RELEASE_VERSION_COMMAS}]") - - # .rc file - file(GLOB _rc_files "${PROJECT_SOURCE_DIR}/*.rc") - foreach(_rc IN LISTS _rc_files) - file(READ "${_rc}" _content) - set(_original "${_content}") - # \d,\s*\d+,\s*\d+,\s*\d+ -> v1 - string(REGEX REPLACE - "[0-9]+,[ \t]*[0-9]+,[ \t]*[0-9]+,[ \t]*[0-9]+" - "${RELEASE_VERSION_COMMAS}" _content "${_content}") - - # \d\.\d+\.\d+\.\d+ -> v2 - string(REGEX REPLACE - "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+" - "${RELEASE_VERSION_FULL}" _content "${_content}") - - # only write if something changed (avoids needless rebuilds) - if(NOT _content STREQUAL _original) - file(WRITE "${_rc}" "${_content}") - message(STATUS "Updated version in ${_rc}") - endif() - endforeach() - - # globals.h - set(_globals "${PROJECT_SOURCE_DIR}/globals.h") - if(EXISTS "${_globals}") - message(STATUS "Updating version in: ${_globals}") - - file(READ "${_globals}" _content) - set(_original "${_content}") - - # #define APP_VERSION ".*" -> #define APP_VERSION "" - string(REGEX REPLACE - "#define APP_VERSION \"[^\"\n]*\"" - "#define APP_VERSION \"${RELEASE_VERSION}\"" - _content "${_content}") - - if(NOT _content STREQUAL _original) - file(WRITE "${_globals}" "${_content}") - message(STATUS "Updated: ${_globals}") - endif() - endif() - - # this file - set(_cmakelists "${PROJECT_SOURCE_DIR}/CMakeLists.txt") - - if(EXISTS "${_cmakelists}") - message(STATUS "Updating version in: ${_cmakelists}") - - file(READ "${_cmakelists}" _content) - set(_original "${_content}") - - # set(APP_VERSION "...") -> set(APP_VERSION "") - set(VAR_NAME "${project}_APP_VERSION") - string(TOUPPER "${VAR_NAME}" VAR_NAME) - string(REGEX REPLACE - "set\\(${VAR_NAME} \"[^\"]*\"\\)" - "set(${VAR_NAME} \"${RELEASE_VERSION}\")" - _content "${_content}") - - if(NOT _content STREQUAL _original) - file(WRITE "${_cmakelists}" "${_content}") - message(STATUS "Updated: ${_cmakelists}") - endif() - endif() - -endfunction() - -pre_build() - if(WIN32) add_compile_definitions(NOMINMAX) # Windows SDK overrides those #add_compile_definitions(WIN32_LEAN_AND_MEAN) @@ -197,22 +119,22 @@ if(WIN32) "${grey_SOURCE_DIR}/grey/common/win32/reg.cpp" "${grey_SOURCE_DIR}/grey/common/win32/user.cpp") - add_executable (${APP_NAME} WIN32 ${core_src} "bt.cpp" bt.rc) + add_executable (${PROJECT_SLUG} WIN32 ${core_src} "bt.cpp" bt.rc) else() - add_executable (${APP_NAME} ${core_src} "bt.cpp") + add_executable (${PROJECT_SLUG} ${core_src} "bt.cpp") endif() if(APPLE) set(MACOSX_ICON "${CMAKE_SOURCE_DIR}/resources/macos/BrowserTamer.icns") set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - target_sources(${APP_NAME} PRIVATE ${MACOSX_ICON}) + target_sources(${PROJECT_SLUG} PRIVATE ${MACOSX_ICON}) - set_target_properties(${APP_NAME} PROPERTIES + set_target_properties(${PROJECT_SLUG} PROPERTIES MACOSX_BUNDLE TRUE - MACOSX_BUNDLE_BUNDLE_NAME "${APP_LONG_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}" MACOSX_BUNDLE_GUI_IDENTIFIER "uk.co.aloneguid.browsertamer" - MACOSX_BUNDLE_INFO_STRING "${APP_LONG_NAME}" + MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}" MACOSX_BUNDLE_ICON_FILE "BrowserTamer.icns" MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}" @@ -242,7 +164,8 @@ if(NOT WIN32) endif() set(COMMON_INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}" + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} ${P_RANAV_CSV2_INCLUDE_DIRS} ${LUA_INCLUDE_DIR}) @@ -254,34 +177,34 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") file(DOWNLOAD "${RULES_URL}" "${RULES_JSON_PATH}" SHOW_PROGRESS) endif() -add_custom_command(TARGET ${APP_NAME} POST_BUILD +add_custom_command(TARGET ${PROJECT_SLUG} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${RULES_JSON_PATH}" - "$/clearurls_rules.json") + "$/clearurls_rules.json") add_custom_command(TARGET test1 POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${RULES_JSON_PATH}" "$/clearurls_rules.json") -target_link_libraries(${APP_NAME} PRIVATE ${COMMON_LIBS}) +target_link_libraries(${PROJECT_SLUG} PRIVATE ${COMMON_LIBS}) target_link_libraries(test1 PRIVATE ${COMMON_LIBS} GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main) -target_include_directories(${APP_NAME} PRIVATE ${COMMON_INCLUDES}) +target_include_directories(${PROJECT_SLUG} PRIVATE ${COMMON_INCLUDES}) target_include_directories(test1 PRIVATE ${COMMON_INCLUDES}) if(WIN32) - #target_sources(${APP_NAME} PRIVATE dpi-aware.manifest) + #target_sources(${PROJECT_SLUG} PRIVATE dpi-aware.manifest) endif() # "Install" target set(CPACK_PACKAGE_NAME "BrowserTamer") set(CPACK_PACKAGE_VENDOR "@aloneguid") set(CPACK_PACKAGE_CONTACT "@aloneguid") -set(CPACK_PACKAGE_DISPLAY_NAME ${APP_LONG_NAME}) +set(CPACK_PACKAGE_DISPLAY_NAME ${PROJECT_NAME}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "BrowserTamer") if(WIN32) - install(TARGETS ${APP_NAME} RUNTIME DESTINATION ".") + install(TARGETS ${PROJECT_SLUG} RUNTIME DESTINATION ".") install(FILES "${RULES_JSON_PATH}" DESTINATION ".") # to use WIX generator (for producing .msi files) you can install wix toolset with .net sdk: @@ -315,14 +238,14 @@ if(WIN32) set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/resources/wix/wix_banner.png") set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/resources/wix/wix_dialog.png") set(CPACK_WIX_PROGRAM_MENU_FOLDER "Browser Tamer") - set(CPACK_WIX_PROPERTY_APPHELPLINK "${APP_URL}") + set(CPACK_WIX_PROPERTY_APPHELPLINK "${PROJECT_HOMEPAGE_URL}") set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/resources/wix/patch.xml") set_property(INSTALL "$" - PROPERTY CPACK_START_MENU_SHORTCUTS "${APP_LONG_NAME}" + PROPERTY CPACK_START_MENU_SHORTCUTS "${PROJECT_NAME}" ) elseif(UNIX AND NOT APPLE) - install(TARGETS ${APP_NAME} RUNTIME DESTINATION "bin") + install(TARGETS ${PROJECT_SLUG} RUNTIME DESTINATION "bin") install(FILES "${RULES_JSON_PATH}" DESTINATION "bin") set(CPACK_GENERATOR DEB) @@ -339,10 +262,10 @@ elseif(UNIX AND NOT APPLE) "${CMAKE_SOURCE_DIR}/resources/xdg/postinst.sh;${CMAKE_SOURCE_DIR}/resources/xdg/postrm.sh") elseif(APPLE) - install(TARGETS ${APP_NAME} BUNDLE DESTINATION ".") + install(TARGETS ${PROJECT_SLUG} BUNDLE DESTINATION ".") set(CPACK_GENERATOR DragNDrop) set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}-mac-${CMAKE_SYSTEM_PROCESSOR}") - set(CPACK_DMG_VOLUME_NAME "${APP_LONG_NAME}") + set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME}") set(CPACK_DMG_FORMAT UDZO) set(CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK OFF) diff --git a/app/discovery.cpp b/app/discovery.cpp index 3b5d194..c7a544e 100644 --- a/app/discovery.cpp +++ b/app/discovery.cpp @@ -5,7 +5,7 @@ #include #include #include -#include "../globals.h" +#include "globals.h" #include // https://github.com/brofield/simpleini #include #include diff --git a/app/pipeline/script.cpp b/app/pipeline/script.cpp index 81ba793..d2130b9 100644 --- a/app/pipeline/script.cpp +++ b/app/pipeline/script.cpp @@ -1,5 +1,5 @@ #include "script.h" -#include "../../globals.h" +#include "globals.h" namespace bt::pipeline { diff --git a/app/setup.cpp b/app/setup.cpp index a049a4a..cca8b7d 100644 --- a/app/setup.cpp +++ b/app/setup.cpp @@ -1,6 +1,6 @@ #include "setup.h" #include -#include "../globals.h" +#include "globals.h" #include #include "discovery.h" diff --git a/app/ui/btwidgets.cpp b/app/ui/btwidgets.cpp index 5524766..4956705 100644 --- a/app/ui/btwidgets.cpp +++ b/app/ui/btwidgets.cpp @@ -1,5 +1,5 @@ #include "btwidgets.h" -#include "../../globals.h" +#include "globals.h" #include "../../res.h" #include "common/fss.h" #include "../strings.h" diff --git a/app/ui/config_app.cpp b/app/ui/config_app.cpp index dc638d1..71e71a8 100644 --- a/app/ui/config_app.cpp +++ b/app/ui/config_app.cpp @@ -10,7 +10,7 @@ #include "../url_opener.h" #include "../discovery.h" #include "../pipeline/replacer.h" -#include "../../globals.h" +#include "globals.h" #include "../../res.h" #include "../strings.h" #include "extra_widgets.hpp" diff --git a/app/ui/picker_app.cpp b/app/ui/picker_app.cpp index 2905a88..44427b1 100644 --- a/app/ui/picker_app.cpp +++ b/app/ui/picker_app.cpp @@ -1,6 +1,6 @@ #include "picker_app.h" #include -#include "../../globals.h" +#include "globals.h" #include #include "btwidgets.h" #include "common/clipboard.h" diff --git a/app/ui/toast_app.cpp b/app/ui/toast_app.cpp index 0cb26c8..2a61cb4 100644 --- a/app/ui/toast_app.cpp +++ b/app/ui/toast_app.cpp @@ -1,5 +1,5 @@ #include "toast_app.h" -#include "../../globals.h" +#include "globals.h" #include "../../res.h" #include "btwidgets.h" #include "common/platform.h" diff --git a/app/url_opener.cpp b/app/url_opener.cpp index ec3204d..eadc522 100644 --- a/app/url_opener.cpp +++ b/app/url_opener.cpp @@ -1,6 +1,6 @@ #include "url_opener.h" #include "url_pipeline.h" -#include "../globals.h" +#include "globals.h" #include "common/url.h" using namespace grey::common; diff --git a/app/url_pipeline.cpp b/app/url_pipeline.cpp index 62e7ac7..8c297ac 100644 --- a/app/url_pipeline.cpp +++ b/app/url_pipeline.cpp @@ -2,7 +2,7 @@ #include "pipeline/unshortener.h" #include "pipeline/o365.h" #include "pipeline/script.h" -#include "../globals.h" +#include "globals.h" #include "magic_enum/magic_enum.hpp" #include "pipeline/clearurls.h" diff --git a/bt.rc b/bt.rc deleted file mode 100644 index fce1763..0000000 --- a/bt.rc +++ /dev/null @@ -1,32 +0,0 @@ -IDI_ICON1 ICON "icon.ico" -IDI_ICON2 ICON "pdf.ico" -IDI_ICON3 ICON "epub.ico" - -1 VERSIONINFO - FILEVERSION 6,3,2,0 - PRODUCTVERSION 6,3,2,0 - FILEFLAGSMASK 0x3fL - FILEFLAGS 0x0L - FILEOS 0x40004L - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000904b0" - BEGIN - VALUE "CompanyName", "Ivan Gavryliuk" - VALUE "FileDescription", "Browser Tamer" - VALUE "FileVersion", "6.3.2.0" - VALUE "InternalName", "Browser Tamer" - VALUE "LegalCopyright", "Copyright (C) 2026 by Ivan Gavryliuk" - VALUE "OriginalFilename", "bt.exe" - VALUE "ProductName", "Browser Tamer" - VALUE "ProductVersion", "6.3.2.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x9, 1200 - END -END diff --git a/bt.rc.in b/bt.rc.in new file mode 100644 index 0000000..d094fdb --- /dev/null +++ b/bt.rc.in @@ -0,0 +1,32 @@ +IDI_ICON1 ICON "icon.ico" +IDI_ICON2 ICON "pdf.ico" +IDI_ICON3 ICON "epub.ico" + +1 VERSIONINFO + FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 + PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 + FILEFLAGSMASK 0x3fL + FILEFLAGS 0x0L + FILEOS 0x40004L + FILETYPE 0x0L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000904b0" + BEGIN + VALUE "CompanyName", "Ivan G" + VALUE "FileDescription", "@PROJECT_NAME@" + VALUE "FileVersion", "@PROJECT_VERSION@.0" + VALUE "InternalName", "Browser Tamer" + VALUE "LegalCopyright", "Copyright (C) @CURRENT_YEAR@ by Ivan G" + VALUE "OriginalFilename", "@PROJECT_SLUG@.exe" + VALUE "ProductName", "@PROJECT_NAME@" + VALUE "ProductVersion", "@PROJECT_VERSION@.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x9, 1200 + END +END diff --git a/docs/release-notes.md b/docs/release-notes.md index 960f2f4..ae0065a 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -8,7 +8,7 @@ - UI: Toast width was slightly narrow when the domain length is wider than the application name. - UI: Allow editing data folder location in a custom browser definition. - Configuration UI will rediscover browsers every time it's opened. This eliminates the need to click the button on the first installation or click "rediscover" every time you open the config (likely this is what you want to do anyway). If this is not what you want, it can be reverted to previous behavior by unticking the config option in the "General" menu item. -- More precise picker calcualation for non-default icon sizes and margins (#258). +- More precise picker calculation for non-default icon sizes and margins (#258). ## 6.3.1 diff --git a/globals.h b/globals.h.in similarity index 81% rename from globals.h rename to globals.h.in index 7b8fa1b..7aaef1d 100644 --- a/globals.h +++ b/globals.h.in @@ -21,17 +21,17 @@ #define PortableMarkerName ".portable" -#define APP_SHORT_NAME "bt" +#define APP_SHORT_NAME "@PROJECT_SLUG@" #if _DEBUG -#define APP_LONG_NAME "Browser Tamer Dev" +#define APP_LONG_NAME "@PROJECT_NAME@ Dev" #else -#define APP_LONG_NAME "Browser Tamer" +#define APP_LONG_NAME "@PROJECT_NAME@" #endif -#define CONFIG_NAME "Browser Tamer" +#define CONFIG_NAME "@PROJECT_NAME@" -#define APP_URL "https://www.aloneguid.uk/projects/bt/" +#define APP_URL "@PROJECT_HOMEPAGE_URL@" #define APP_TEST_URL "https://www.aloneguid.uk/other/bt-test-page/" @@ -47,7 +47,7 @@ #define APP_REG_DESCRIPTION "Redirects open URLs to a browser of your choice." -#define APP_VERSION "6.3.2" +#define APP_VERSION "@PROJECT_VERSION@" extern bt::url_pipeline g_pipeline;