diff --git a/.github/workflows/build-all.yml b/.github/workflows/build-all.yml index ad5369a..2695e22 100644 --- a/.github/workflows/build-all.yml +++ b/.github/workflows/build-all.yml @@ -104,9 +104,20 @@ jobs: development_build: ${{ inputs.development_build || github.event.inputs.development_build || false }} clean_build: ${{ inputs.clean_build || github.event.inputs.clean_build || false }} + windows-arm64ec: + uses: ./.github/workflows/build-windows-arm64ec.yml + secrets: inherit + with: + sdk_url: ${{ inputs.sdk_url || github.event.inputs.sdk_url }} + version: ${{ inputs.version || github.event.inputs.version }} + webbrowser_version: ${{ inputs.webbrowser_version || github.event.inputs.webbrowser_version }} + development_build: ${{ inputs.development_build || github.event.inputs.development_build || false }} + clean_build: ${{ inputs.clean_build || github.event.inputs.clean_build || false }} + create_installer: ${{ inputs.create_installer || github.event_name == 'pull_request' }} + summary: name: "📊 Build Summary" - needs: [windows, macos-x64, macos-arm64, linux-x64, linux-arm64] + needs: [windows, windows-arm64ec, macos-x64, macos-arm64, linux-x64, linux-arm64] if: always() runs-on: ubuntu-latest steps: @@ -129,13 +140,14 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "---" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - + # Job status table echo "## 📋 Build Status" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "| Platform | Status |" >> $GITHUB_STEP_SUMMARY echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY echo "| 🪟 Windows x64 | ${{ needs.windows.result }} |" >> $GITHUB_STEP_SUMMARY + echo "| 🪟 Windows ARM64EC | ${{ needs.windows-arm64ec.result }} |" >> $GITHUB_STEP_SUMMARY echo "| 🍎 macOS x64 | ${{ needs.macos-x64.result }} |" >> $GITHUB_STEP_SUMMARY echo "| 🍎 macOS ARM64 | ${{ needs.macos-arm64.result }} |" >> $GITHUB_STEP_SUMMARY echo "| 🐧 Linux x64 | ${{ needs.linux-x64.result }} |" >> $GITHUB_STEP_SUMMARY @@ -143,11 +155,11 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "---" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - + # List all artifacts echo "## 📦 Generated Artifacts" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - + if [ -d "artifacts" ]; then find artifacts -type f \( -name "*.zip" -o -name "*.exe" -o -name "*.tar.gz" -o -name "*.deb" -o -name "*.rpm" -o -name "*.dmg" \) | while read file; do size=$(du -h "$file" | cut -f1) @@ -157,15 +169,15 @@ jobs: else echo "⚠️ No artifacts directory found" >> $GITHUB_STEP_SUMMARY fi - + echo "" >> $GITHUB_STEP_SUMMARY echo "---" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - + # Include individual platform summaries if available echo "## 📝 Platform Details" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - + for summary in artifacts/*/BUILD-SUMMARY.md; do if [ -f "$summary" ]; then platform=$(dirname "$summary" | xargs basename) @@ -180,7 +192,7 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY fi done - + echo "---" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "**🎉 Build completed!**" >> $GITHUB_STEP_SUMMARY @@ -192,17 +204,19 @@ jobs: run: | echo "Checking build results..." if [[ "${{ needs.windows.result }}" != "success" ]] || \ + [[ "${{ needs.windows-arm64ec.result }}" != "success" ]] || \ [[ "${{ needs.macos-x64.result }}" != "success" ]] || \ [[ "${{ needs.macos-arm64.result }}" != "success" ]] || \ [[ "${{ needs.linux-x64.result }}" != "success" ]] || \ [[ "${{ needs.linux-arm64.result }}" != "success" ]]; then - echo "⚠️ One or more builds failed or were skipped" - echo "Windows: ${{ needs.windows.result }}" - echo "macOS x64: ${{ needs.macos-x64.result }}" - echo "macOS ARM64: ${{ needs.macos-arm64.result }}" - echo "Linux x64: ${{ needs.linux-x64.result }}" - echo "Linux ARM64: ${{ needs.linux-arm64.result }}" - exit 1 + echo "⚠️ One or more builds failed or were skipped" + echo "Windows: ${{ needs.windows.result }}" + echo "Windows ARM64EC: ${{ needs.windows-arm64ec.result }}" + echo "macOS x64: ${{ needs.macos-x64.result }}" + echo "macOS ARM64: ${{ needs.macos-arm64.result }}" + echo "Linux x64: ${{ needs.linux-x64.result }}" + echo "Linux ARM64: ${{ needs.linux-arm64.result }}" + exit 1 else echo "✅ All builds succeeded!" fi diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index cefcad6..db6b07f 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -336,20 +336,20 @@ jobs: if [ -f "build/CMakeCache.txt" ]; then echo "CMake cache found, checking if reconfiguration needed..." cacheValid=true - + # Check if SDK root changed cachedSdkRoot=$(grep "ULTRALIGHT_SDK_ROOT:.*=" build/CMakeCache.txt | sed 's/.*=//' || true) if [ "$cachedSdkRoot" != "$ULTRALIGHT_SDK_ROOT" ]; then echo "SDK root changed, reconfiguration needed" cacheValid=false fi - + if [ "$cacheValid" = "true" ]; then echo "✅ CMake cache is valid, skipping reconfiguration (saves ~30-60 seconds)" exit 0 fi fi - + cmake --version echo "Configuring with ULTRALIGHT_SDK_ROOT=$ULTRALIGHT_SDK_ROOT" cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DULTRALIGHT_SDK_ROOT="$ULTRALIGHT_SDK_ROOT" -DBUILD_TESTING=OFF -DAUTO_INSTALL_CURL=ON -DWEBBROWSER_VERSION="$WEBBROWSER_VERSION" @@ -417,16 +417,16 @@ jobs: run: | set -euo pipefail echo "🚀 Generating comprehensive build summary..." - + # Get SDK version sdkVersion="${ULTRALIGHT_VERSION:-Unknown}" if [ -f "build/ultralight_sdk_version.txt" ]; then sdkVersion=$(cat "build/ultralight_sdk_version.txt" | tr -d '[:space:]') fi - + # Make script executable chmod +x scripts/generate-build-summary.sh - + # Run the build summary script bash scripts/generate-build-summary.sh \ "build" \ @@ -436,7 +436,7 @@ jobs: "${{ github.sha }}" \ "$sdkVersion" \ "BUILD-SUMMARY.md" - + # Create JSON metadata file cat > build/BUILD-METADATA.json << EOF { @@ -452,7 +452,7 @@ jobs: "runNumber": "${{ github.run_number }}" } EOF - + echo "✅ Build summary and metadata generated successfully" - name: 8.1 Display Build Summary @@ -563,7 +563,7 @@ jobs: else echo "⚠️ BUILD-SUMMARY.md not found, skipping job summary" fi - + # Show cache statistics echo "" echo "📊 Cache Statistics:" diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index b55779f..449b985 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -386,20 +386,20 @@ jobs: if [ -f "build/CMakeCache.txt" ]; then echo "CMake cache found, checking if reconfiguration needed..." cacheValid=true - + # Check if SDK root changed cachedSdkRoot=$(grep "ULTRALIGHT_SDK_ROOT:.*=" build/CMakeCache.txt | sed 's/.*=//' || true) if [ "$cachedSdkRoot" != "$ULTRALIGHT_SDK_ROOT" ]; then echo "SDK root changed, reconfiguration needed" cacheValid=false fi - + if [ "$cacheValid" = "true" ]; then echo "✅ CMake cache is valid, skipping reconfiguration (saves ~30-60 seconds)" exit 0 fi fi - + cmake --version echo "Configuring with ULTRALIGHT_SDK_ROOT=$ULTRALIGHT_SDK_ROOT" cmake -S . -B build -DULTRALIGHT_SDK_ROOT="$ULTRALIGHT_SDK_ROOT" -DBUILD_TESTING=OFF -DAUTO_INSTALL_CURL=ON -DWEBBROWSER_VERSION="$WEBBROWSER_VERSION" @@ -518,16 +518,16 @@ jobs: run: | set -euo pipefail echo "🚀 Generating comprehensive build summary..." - + # Get SDK version sdkVersion="${ULTRALIGHT_VERSION:-Unknown}" if [ -f "build/ultralight_sdk_version.txt" ]; then sdkVersion=$(cat "build/ultralight_sdk_version.txt" | tr -d '[:space:]') fi - + # Make script executable chmod +x scripts/generate-build-summary.sh - + # Run the build summary script bash scripts/generate-build-summary.sh \ "build" \ @@ -537,7 +537,7 @@ jobs: "${{ github.sha }}" \ "$sdkVersion" \ "BUILD-SUMMARY.md" - + # Create JSON metadata file cat > build/BUILD-METADATA.json << EOF { @@ -553,7 +553,7 @@ jobs: "runNumber": "${{ github.run_number }}" } EOF - + echo "✅ Build summary and metadata generated successfully" - name: 7.1 Display Build Summary @@ -643,7 +643,7 @@ jobs: else echo "⚠️ BUILD-SUMMARY.md not found, skipping job summary" fi - + # Show cache statistics echo "" echo "📊 Cache Statistics:" diff --git a/.github/workflows/build-windows-arm64ec.yml b/.github/workflows/build-windows-arm64ec.yml new file mode 100644 index 0000000..e1b1c02 --- /dev/null +++ b/.github/workflows/build-windows-arm64ec.yml @@ -0,0 +1,245 @@ +name: Build - Windows ARM64EC + +permissions: + contents: read + actions: write + +on: + workflow_dispatch: + inputs: + sdk_url: + description: "Override ULTRALIGHT_SDK_URL (raw .7z in base-sdk branch)" + required: false + type: string + version: + description: "Override ULTRALIGHT_VERSION (eg. 1.4.0)" + required: false + type: string + webbrowser_version: + description: "Override build version name (default 'dev')" + required: false + type: string + create_installer: + description: "Create Windows installer via CPack (NSIS)" + required: false + type: boolean + development_build: + description: "Development build (keeps intermediate packages, verbose logs)" + required: false + type: boolean + default: false + clean_build: + description: "Clean build (skip all caches for fresh build)" + required: false + type: boolean + default: false + workflow_call: + inputs: + sdk_url: + description: "Override ULTRALIGHT_SDK_URL (raw .7z in base-sdk branch)" + required: false + type: string + version: + description: "Override ULTRALIGHT_VERSION (eg. 1.4.0)" + required: false + type: string + webbrowser_version: + description: "Override build version name (default 'dev')" + required: false + type: string + create_installer: + description: "Create Windows installer via CPack (NSIS)" + required: false + type: boolean + default: false + development_build: + description: "Development build (keeps intermediate packages, verbose logs)" + required: false + type: boolean + default: false + clean_build: + description: "Clean build (skip all caches for fresh build)" + required: false + type: boolean + default: false + +jobs: + build-arm64ec: + runs-on: windows-latest + env: + ULTRALIGHT_SDK_URL: ${{ inputs.sdk_url || github.event.inputs.sdk_url }} + ULTRALIGHT_VERSION: ${{ inputs.version || github.event.inputs.version }} + WEBBROWSER_VERSION: ${{ inputs.webbrowser_version || github.event.inputs.webbrowser_version || 'dev' }} + CREATE_INSTALLER: ${{ inputs.create_installer || github.event.inputs.create_installer }} + DEVELOPMENT_BUILD: ${{ inputs.development_build || github.event.inputs.development_build || 'false' }} + CLEAN_BUILD: ${{ inputs.clean_build || github.event.inputs.clean_build || 'false' }} + + steps: + - name: Configure Git (longpaths, autocrlf=false) + shell: pwsh + run: | + git config --global core.longpaths true + git config --global core.autocrlf false + + - name: Checkout Code (with submodules) + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 1 + + - name: Setup CMake Build Cache + if: inputs.clean_build != true + uses: actions/cache@v4 + with: + path: | + build + !build/CMakeFiles + !build/Testing + !build/_CPack_Packages + !build/**/*.exe + !build/**/*.dll + !build/**/*.zip + !build/**/*.7z + key: ${{ runner.os }}-cmake-${{ hashFiles('CMakeLists.txt', 'cmake/**') }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-cmake-${{ hashFiles('CMakeLists.txt', 'cmake/**') }}- + ${{ runner.os }}-cmake- + + - name: Setup SDK Cache + if: inputs.clean_build != true + uses: actions/cache@v4 + with: + path: | + libs/Ultralight + ultralight-sdk-*.7z + key: ${{ runner.os }}-sdk-${{ env.ULTRALIGHT_VERSION || 'latest' }} + restore-keys: | + ${{ runner.os }}-sdk- + + - name: Setup Compiler Cache (sccache) + if: inputs.clean_build != true + uses: mozilla-actions/sccache-action@v0.0.5 + + - name: Configure Compiler Cache Environment + if: inputs.clean_build != true + shell: pwsh + run: | + echo "SCCACHE_DIR=$env:GITHUB_WORKSPACE\.sccache" >> $env:GITHUB_ENV + echo "CMAKE_CXX_COMPILER_LAUNCHER=sccache" >> $env:GITHUB_ENV + echo "CMAKE_C_COMPILER_LAUNCHER=sccache" >> $env:GITHUB_ENV + + - name: Detect ULTRALIGHT_SDK_URL from repo base-sdk branch (Windows) + id: detect_url + shell: pwsh + run: | + if ($env:ULTRALIGHT_SDK_URL) { exit 0 } + $api = "https://api.github.com/repos/${{ github.repository }}/contents/sdks?ref=base-sdk" + $headers = @{ Authorization = "Bearer $env:GITHUB_TOKEN"; Accept = "application/vnd.github+json" } + try { $resp = Invoke-RestMethod -Uri $api -Headers $headers -Method Get -UseBasicParsing } catch { $resp = $null } + if ($resp) { + $names = @($resp | Where-Object { $_.type -eq 'file' } | ForEach-Object { $_.name }) + if ($names.Count -gt 0) { + $candidates = @() + foreach ($n in $names) { + if ($n -match '^ultralight(-free)?-sdk-([0-9]+\.[0-9]+\.[0-9]+)-(win|windows)-x64\.7z$') { $candidates += $n } + } + if ($candidates.Count -gt 0) { + $best = $null + foreach ($f in $candidates) { + $m = [regex]::Match($f, '([0-9]+\.[0-9]+\.[0-9]+)') + if ($m.Success) { + $ver = [version]$m.Groups[1].Value + if (-not $best -or $ver -gt $best.Version) { $best = [pscustomobject]@{ Version=$ver; File=$f } } + } + } + if ($best) { + $baseRaw = "https://raw.githubusercontent.com/${{ github.repository }}/base-sdk/sdks" + $url = "$baseRaw/$($best.File)" + "ULTRALIGHT_SDK_URL=$url" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + "ULTRALIGHT_VERSION=$($best.Version.ToString())" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + "url=$url" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + "version=$($best.Version.ToString())" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + exit 0 + } + } + } + } + $header = "data/include/Ultralight/Defines.h" + $version = $null + if (Test-Path $header) { + $matchLine = Select-String -Path $header -Pattern '^#define\s+ULTRALIGHT_VERSION\s+"([^"]+)"' | Select-Object -First 1 + if ($matchLine) { $version = $matchLine.Matches[0].Groups[1].Value } + } + if (-not $version) { + if ($env:ULTRALIGHT_VERSION) { $version = $env:ULTRALIGHT_VERSION } + else { $version = '1.4.0' } + } + $baseRaw = "https://raw.githubusercontent.com/${{ github.repository }}/base-sdk/sdks" + $candidates = @( + "$baseRaw/ultralight-free-sdk-$version-win-x64.7z", + "$baseRaw/ultralight-free-sdk-$version-windows-x64.7z" + ) + function Test-Url($u) { + try { $r = Invoke-WebRequest -Uri $u -Method Head -UseBasicParsing; return $true } catch {} + try { $tmp = Join-Path $env:RUNNER_TEMP "probe.tmp"; Invoke-WebRequest -Uri $u -Method Get -UseBasicParsing -OutFile $tmp | Out-Null; Remove-Item $tmp -ErrorAction SilentlyContinue; return $true } catch { return $false } + } + $found = $null + foreach ($url in $candidates) { if (Test-Url $url) { $found = $url; break } } + if ($found) { "ULTRALIGHT_SDK_URL=$found" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append } + else { Write-Error "Could not auto-detect a valid Windows SDK URL in base-sdk branch for version $version."; exit 1 } + + - name: Install 7zip + shell: pwsh + run: | + choco install 7zip -y --no-progress + $sevenZipExe = Join-Path $env:ProgramFiles '7-Zip/7z.exe' + if (Test-Path $sevenZipExe) { (Split-Path $sevenZipExe) | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append } + + - name: Prepare Ultralight SDK (Windows) + id: prep_sdk + shell: pwsh + run: | + $rootDefault = Join-Path $env:GITHUB_WORKSPACE 'data' + $root = $env:ULTRALIGHT_SDK_ROOT + if (-not $root) { $root = $rootDefault } + $present = 'false' + if ((Test-Path (Join-Path $root 'include')) -and ((Test-Path (Join-Path $root 'lib')) -or (Test-Path (Join-Path $root 'bin')))) { $present = 'true' } + elseif ($env:ULTRALIGHT_SDK_URL) { + $dlUrl = $env:ULTRALIGHT_SDK_URL + if ($dlUrl -match '^https://github.com/([^/]+)/([^/]+)/blob/(.+)$') { + $dlUrl = "https://raw.githubusercontent.com/$($Matches[1])/$($Matches[2])/$($Matches[3])" + } + $pkg = Join-Path $env:RUNNER_TEMP 'ultralight-sdk' + Invoke-WebRequest -Uri $dlUrl -UseBasicParsing -OutFile $pkg + $extract = Join-Path $env:RUNNER_TEMP 'sdk-extract' + New-Item -ItemType Directory -Force -Path $extract | Out-Null + & 7z x -y -o"$extract" "$pkg" | Out-Null + $rootFound = Get-ChildItem -Path $extract -Recurse -Directory | Where-Object { Test-Path (Join-Path $_.FullName 'include') -and Test-Path (Join-Path $_.FullName 'lib') } | Select-Object -First 1 + if ($rootFound) { $root = $rootFound.FullName; $present = 'true' } + } + "present=$present" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + if ($present -eq 'true') { + "ULTRALIGHT_SDK_ROOT=$root" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + } else { Write-Error "Ultralight Windows SDK not found."; exit 1 } + + - name: Install libcurl (vcpkg/choco) + shell: pwsh + run: | + pwsh -File "${{ github.workspace }}\scripts\install_curl.ps1" + + - name: Configure CMake (ARM64EC) + if: steps.prep_sdk.outputs.present == 'true' + shell: pwsh + run: | + cmake --version + $createInstaller = "$env:CREATE_INSTALLER" + if ($createInstaller -eq '' -or $null -eq $createInstaller) { $createInstaller = 'false' } + $installerFlag = if ($createInstaller -match '^(true|1|on)$') { 'ON' } else { 'OFF' } + $vcpkgToolchain = if ($env:VCPKG_ROOT) { "-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" } else { "" } + cmake -S . -B build -G "Visual Studio 17 2022" -A ARM64EC -DULTRALIGHT_SDK_ROOT="$env:ULTRALIGHT_SDK_ROOT" -DBUILD_TESTING=OFF -DAUTO_INSTALL_CURL=ON -DCREATE_INSTALLER=$installerFlag -DWEBBROWSER_VERSION="$env:WEBBROWSER_VERSION" -DCMAKE_BUILD_TYPE=Release $vcpkgToolchain + + - name: Build Project + shell: pwsh + run: | + $ErrorActionPreference = 'Stop' + & cmake --build build --config Release --parallel diff --git a/CMakeLists.txt b/CMakeLists.txt index 621b45b..9c51f10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,6 +71,8 @@ set(SOURCES "src/AdBlocker.cpp" "src/BookmarkStore.h" "src/BookmarkStore.cpp" + "src/ThemeManager.h" + "src/ThemeManager.cpp" "src/DownloadManager.h" "src/DownloadManager.cpp" "src/ExtensionManager.h" @@ -148,7 +150,7 @@ endif() # Download and configure WebView2 SDK via FetchContent. if(WIN32 AND MSVC) include(FetchContent) - + # Download WebView2 SDK from NuGet FetchContent_Declare( webview2 @@ -156,11 +158,11 @@ if(WIN32 AND MSVC) DOWNLOAD_EXTRACT_TIMESTAMP TRUE ) FetchContent_MakeAvailable(webview2) - + # WebView2 headers and libs from NuGet package set(WEBVIEW2_INCLUDE_DIR "${webview2_SOURCE_DIR}/build/native/include") set(WEBVIEW2_LIB_DIR "${webview2_SOURCE_DIR}/build/native/x64") - + if(EXISTS "${WEBVIEW2_INCLUDE_DIR}/WebView2.h") message(STATUS "Building DRM Windows WebView using Microsoft WebView2 SDK") target_include_directories(Ultralight-WebBrowser PRIVATE ${WEBVIEW2_INCLUDE_DIR}) @@ -190,7 +192,7 @@ endif() find_library(ULTRALIGHT_LIB NAMES Ultralight PATHS "${ULTRALIGHT_SDK_ROOT}/lib" "${ULTRALIGHT_SDK_ROOT}/bin" NO_DEFAULT_PATH) find_library(ULTRALIGHT_CORE_LIB NAMES UltralightCore PATHS "${ULTRALIGHT_SDK_ROOT}/lib" "${ULTRALIGHT_SDK_ROOT}/bin" NO_DEFAULT_PATH) find_library(WEB_CORE_LIB NAMES WebCore PATHS "${ULTRALIGHT_SDK_ROOT}/lib" "${ULTRALIGHT_SDK_ROOT}/bin" NO_DEFAULT_PATH) - + if(APP_CORE_LIB AND ULTRALIGHT_LIB) add_executable(UtilsTest tests/UtilsTest.cpp src/Utils.cpp) target_link_libraries(UtilsTest PRIVATE ${APP_CORE_LIB} ${ULTRALIGHT_LIB} ${ULTRALIGHT_CORE_LIB} ${WEB_CORE_LIB}) @@ -474,7 +476,7 @@ if(WIN32) set(CPACK_NSIS_MUI_ICON "${APP_ICON_ICO}") set(CPACK_NSIS_MUI_UNIICON "${APP_ICON_ICO}") endif() - + # Configure Start Menu shortcuts to point to the correct executable set(CPACK_NSIS_INSTALLED_ICON_NAME "${INSTALL_DIR_NAME}\\\\Ultralight-WebBrowser.exe") set(CPACK_NSIS_CREATE_ICONS_EXTRA " diff --git a/assets/bookmarks.html b/assets/bookmarks.html new file mode 100644 index 0000000..c7180f6 --- /dev/null +++ b/assets/bookmarks.html @@ -0,0 +1,460 @@ + + +
+ +