diff --git a/ae_anons-v0.2.6-all.tar.gz b/ae_anons-v0.2.6-all.tar.gz index 56bbb83..6db1691 100644 Binary files a/ae_anons-v0.2.6-all.tar.gz and b/ae_anons-v0.2.6-all.tar.gz differ diff --git a/build.rs b/build.rs index a306598..521c008 100644 --- a/build.rs +++ b/build.rs @@ -1,9 +1,11 @@ -// build.rs fn main() { #[cfg(windows)] { - let mut res = winres::WindowsResource::new(); - res.set_icon("assets/logo.ico"); - res.compile().unwrap(); + if let Err(e) = winres::WindowsResource::new() + .set_icon("assets/logo.ico") + .compile() + { + eprintln!("warning: не удалось встроить иконку: {e}"); + } } } \ No newline at end of file diff --git a/makefile b/makefile index b7edf0f..ecb7e77 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -.PHONY: all clean build-mac build-windows build-linux build-linux-musl package help quick package-single icons favicon +.PHONY: all clean build-mac build-windows build-linux build-linux-musl package help quick package-single setup icons favicon windows-icon # Название проекта PROJECT_NAME := ae_anons @@ -26,6 +26,11 @@ TIMING_FILE := .build_timing # Определение команды ImageMagick (v6 = convert, v7 = magick) IMAGEMAGICK := $(shell command -v magick 2>/dev/null || command -v convert 2>/dev/null || echo "false") +# Параметры Font Awesome +FONTAWESOME_VERSION := 6.4.0 +FONTAWESOME_CSS_URL := https://cdnjs.cloudflare.com/ajax/libs/font-awesome/$(FONTAWESOME_VERSION)/css/all.min.css +FONTAWESOME_FONTS_URL := https://cdnjs.cloudflare.com/ajax/libs/font-awesome/$(FONTAWESOME_VERSION)/webfonts + help: @echo "$(BOLD)$(CYAN)AE Anons - Makefile команды$(NC)" @echo "" @@ -44,9 +49,8 @@ help: @echo " make package - Создать пакеты для всех платформ" @echo " make package-single - Создать пакет для текущей платформы" @echo "" - @echo "$(GREEN)Иконки:$(NC)" - @echo " make icons - Создать все иконки (logo.ico, logo.icns, favicon.ico)" - @echo " make favicon - Создать только favicon.ico" + @echo "$(GREEN)Подготовка ресурсов:$(NC)" + @echo " make setup - Загрузить и подготовить все статические ресурсы" @echo "" @echo "$(GREEN)Очистка:$(NC)" @echo " make clean - Очистить все сборки" @@ -99,48 +103,64 @@ define print_timing_summary endef # ============================================ -# ИКОНКИ +# ПОДГОТОВКА СТАТИЧЕСКИХ РЕСУРСОВ # ============================================ -icons: favicon - @echo "$(GREEN)Создание иконок для Windows и macOS...$(NC)" +setup: setup-fontawesome icons + @echo "$(GREEN)✅ Все статические ресурсы подготовлены$(NC)" + +# Скачивает и подготавливает Font Awesome, если его ещё нет +setup-fontawesome: + @echo "$(GREEN)📦 Проверка Font Awesome...$(NC)" + @if [ ! -f src/static/fontawesome/all.min.css ]; then \ + echo "$(YELLOW) Скачивание all.min.css и шрифтов...$(NC)"; \ + mkdir -p src/static/fontawesome/webfonts; \ + curl -sL -o src/static/fontawesome/all.min.css $(FONTAWESOME_CSS_URL); \ + curl -sL -o src/static/fontawesome/webfonts/fa-solid-900.woff2 $(FONTAWESOME_FONTS_URL)/fa-solid-900.woff2; \ + curl -sL -o src/static/fontawesome/webfonts/fa-regular-400.woff2 $(FONTAWESOME_FONTS_URL)/fa-regular-400.woff2; \ + curl -sL -o src/static/fontawesome/webfonts/fa-brands-400.woff2 $(FONTAWESOME_FONTS_URL)/fa-brands-400.woff2; \ + echo "$(GREEN) ✓ Font Awesome скачан$(NC)"; \ + else \ + echo "$(GREEN) ✓ Font Awesome уже существует$(NC)"; \ + fi + @echo "$(GREEN) Исправление путей в all.min.css...$(NC)" + @sed -i '' 's|../webfonts/|/static/fontawesome/webfonts/|g' src/static/fontawesome/all.min.css + @echo "$(GREEN) ✓ Пути исправлены$(NC)" + +# Генерация иконок (favicon, .ico, .icns) из логотипа +icons: + @echo "$(GREEN)🎨 Генерация иконок...$(NC)" @if [ "$(IMAGEMAGICK)" = "false" ]; then \ echo "$(RED)❌ ImageMagick не установлен. Установите: brew install imagemagick$(NC)"; \ exit 1; \ fi + # favicon.ico + @$(IMAGEMAGICK) assets/logo.png -define icon:auto-resize=48,32,16 src/static/favicon.ico + @echo "$(GREEN) ✓ src/static/favicon.ico$(NC)" # Windows .ico @$(IMAGEMAGICK) assets/logo.png -define icon:auto-resize=256,128,64,48,32,16 assets/logo.ico @echo "$(GREEN) ✓ assets/logo.ico$(NC)" # macOS .icns @mkdir -p assets/icon.iconset - @sips -z 16 16 assets/logo.png --out assets/icon.iconset/icon_16x16.png 2>/dev/null - @sips -z 32 32 assets/logo.png --out assets/icon.iconset/icon_16x16@2x.png 2>/dev/null - @sips -z 32 32 assets/logo.png --out assets/icon.iconset/icon_32x32.png 2>/dev/null - @sips -z 64 64 assets/logo.png --out assets/icon.iconset/icon_32x32@2x.png 2>/dev/null - @sips -z 128 128 assets/logo.png --out assets/icon.iconset/icon_128x128.png 2>/dev/null - @sips -z 256 256 assets/logo.png --out assets/icon.iconset/icon_128x128@2x.png 2>/dev/null - @sips -z 256 256 assets/logo.png --out assets/icon.iconset/icon_256x256.png 2>/dev/null - @sips -z 512 512 assets/logo.png --out assets/icon.iconset/icon_256x256@2x.png 2>/dev/null - @sips -z 512 512 assets/logo.png --out assets/icon.iconset/icon_512x512.png 2>/dev/null - @iconutil -c icns assets/icon.iconset -o assets/logo.icns 2>/dev/null + @sips -z 16 16 assets/logo.png --out assets/icon.iconset/icon_16x16.png 2>/dev/null || true + @sips -z 32 32 assets/logo.png --out assets/icon.iconset/icon_16x16@2x.png 2>/dev/null || true + @sips -z 32 32 assets/logo.png --out assets/icon.iconset/icon_32x32.png 2>/dev/null || true + @sips -z 64 64 assets/logo.png --out assets/icon.iconset/icon_32x32@2x.png 2>/dev/null || true + @sips -z 128 128 assets/logo.png --out assets/icon.iconset/icon_128x128.png 2>/dev/null || true + @sips -z 256 256 assets/logo.png --out assets/icon.iconset/icon_128x128@2x.png 2>/dev/null || true + @sips -z 256 256 assets/logo.png --out assets/icon.iconset/icon_256x256.png 2>/dev/null || true + @sips -z 512 512 assets/logo.png --out assets/icon.iconset/icon_256x256@2x.png 2>/dev/null || true + @sips -z 512 512 assets/logo.png --out assets/icon.iconset/icon_512x512.png 2>/dev/null || true + @iconutil -c icns assets/icon.iconset -o assets/logo.icns 2>/dev/null || true @rm -rf assets/icon.iconset @echo "$(GREEN) ✓ assets/logo.icns$(NC)" -favicon: - @echo "$(GREEN)Создание favicon.ico...$(NC)" - @if [ "$(IMAGEMAGICK)" = "false" ]; then \ - echo "$(RED)❌ ImageMagick не установлен. Установите: brew install imagemagick$(NC)"; \ - exit 1; \ - fi - @$(IMAGEMAGICK) assets/logo.png -define icon:auto-resize=48,32,16 src/static/favicon.ico - @echo "$(GREEN) ✓ src/static/favicon.ico$(NC)" - # ============================================ -# ИКОНКА ДЛЯ WINDOWS +# ИКОНКА ДЛЯ WINDOWS .EXE (доп. проверка) # ============================================ windows-icon: @if [ ! -f assets/logo.ico ]; then \ - echo "$(YELLOW)logo.ico не найден, запускаю генерацию...$(NC)"; \ + echo "$(YELLOW)logo.ico не найден, запускаю генерацию иконок...$(NC)"; \ $(MAKE) icons; \ fi @@ -167,7 +187,7 @@ endif # БЫСТРАЯ СБОРКА (ТЕКУЩАЯ ПЛАТФОРМА) # ============================================ -quick: detect-platform +quick: setup detect-platform quick-release: ifeq ($(UNAME_S),Darwin) @@ -184,7 +204,7 @@ else @exit 1 endif -quick-mac: +quick-mac: setup @rm -f $(TIMING_FILE) @$(call measure_time,"🍎 macOS $(UNAME_M)",cargo build --release) @mkdir -p $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-macos-$(UNAME_M) @@ -193,7 +213,7 @@ quick-mac: @echo "$(GREEN)✅ Пакет: $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-macos-$(UNAME_M)/$(NC)" @$(call print_timing_summary) -quick-linux: +quick-linux: setup @rm -f $(TIMING_FILE) @$(call measure_time,"🐧 Linux $(UNAME_M)",cargo build --target x86_64-unknown-linux-musl --release) @mkdir -p $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-linux-$(UNAME_M) @@ -202,7 +222,7 @@ quick-linux: @echo "$(GREEN)✅ Пакет: $(BINARIES_DIR)/$(PROJECT_NAME)-v$(VERSION)-linux-$(UNAME_M)/$(NC)" @$(call print_timing_summary) -quick-windows: +quick-windows: setup windows-icon @rm -f $(TIMING_FILE) @if command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1; then \ $(call measure_time,"🪟 Windows x64",cargo build --target x86_64-pc-windows-gnu --release); \ @@ -221,19 +241,19 @@ quick-windows: # СБОРКА ПОД КОНКРЕТНЫЕ ПЛАТФОРМЫ # ============================================ -build-mac: +build-mac: setup @echo "$(GREEN)🍎 Сборка для macOS...$(NC)" @time cargo build --release -build-windows: windows-icon +build-windows: setup windows-icon @echo "$(GREEN)🪟 Сборка для Windows x86_64...$(NC)" @time cargo build --target x86_64-pc-windows-gnu --release - -build-linux: + +build-linux: setup @echo "$(GREEN)🐧 Сборка для Linux x86_64 (GNU)...$(NC)" @time cargo build --target x86_64-unknown-linux-gnu --release -build-linux-musl: +build-linux-musl: setup @echo "$(GREEN)🐧 Сборка для Linux x86_64 (musl static)...$(NC)" @time cargo build --target x86_64-unknown-linux-musl --release @@ -241,7 +261,7 @@ build-linux-musl: # СБОРКА ВСЕХ ПЛАТФОРМ С ТАЙМИНГОМ # ============================================ -build-all: +build-all: setup @rm -f $(TIMING_FILE) @echo "$(BOLD)$(CYAN)🚀 Сборка для всех платформ...$(NC)" @echo "" diff --git a/releases/ae_anons-v0.2.6-linux-gnu/ae_anons b/releases/ae_anons-v0.2.6-linux-gnu/ae_anons index a71a285..4110781 100755 Binary files a/releases/ae_anons-v0.2.6-linux-gnu/ae_anons and b/releases/ae_anons-v0.2.6-linux-gnu/ae_anons differ diff --git a/releases/ae_anons-v0.2.6-linux-musl/ae_anons b/releases/ae_anons-v0.2.6-linux-musl/ae_anons index e13ec95..dcf5c81 100755 Binary files a/releases/ae_anons-v0.2.6-linux-musl/ae_anons and b/releases/ae_anons-v0.2.6-linux-musl/ae_anons differ diff --git a/releases/ae_anons-v0.2.6-macos-arm64/ae_anons b/releases/ae_anons-v0.2.6-macos-arm64/ae_anons index e21a845..2a47649 100755 Binary files a/releases/ae_anons-v0.2.6-macos-arm64/ae_anons and b/releases/ae_anons-v0.2.6-macos-arm64/ae_anons differ diff --git a/releases/ae_anons-v0.2.6-windows-x64/ae_anons.exe b/releases/ae_anons-v0.2.6-windows-x64/ae_anons.exe index a0c3930..def75cd 100755 Binary files a/releases/ae_anons-v0.2.6-windows-x64/ae_anons.exe and b/releases/ae_anons-v0.2.6-windows-x64/ae_anons.exe differ diff --git a/src/static/fontawesome/all.min.css b/src/static/fontawesome/all.min.css index 80239ed..101953d 100644 --- a/src/static/fontawesome/all.min.css +++ b/src/static/fontawesome/all.min.css @@ -6793,7 +6793,7 @@ font-style: normal; font-weight: 400; font-display: block; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype") } .fa-brands, @@ -8713,7 +8713,7 @@ font-style: normal; font-weight: 400; font-display: block; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype") } .fa-regular, @@ -8732,7 +8732,7 @@ font-style: normal; font-weight: 900; font-display: block; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype") } .fa-solid, @@ -8744,45 +8744,45 @@ font-family: "Font Awesome 5 Brands"; font-display: block; font-weight: 400; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype") } @font-face { font-family: "Font Awesome 5 Free"; font-display: block; font-weight: 900; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype") } @font-face { font-family: "Font Awesome 5 Free"; font-display: block; font-weight: 400; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype") } @font-face { font-family: "FontAwesome"; font-display: block; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-solid-900.ttf) format("truetype") } @font-face { font-family: "FontAwesome"; font-display: block; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype") + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-brands-400.ttf) format("truetype") } @font-face { font-family: "FontAwesome"; font-display: block; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype"); + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-regular-400.ttf) format("truetype"); unicode-range: u+f003, u+f006, u+f014, u+f016-f017, u+f01a-f01b, u+f01d, u+f022, u+f03e, u+f044, u+f046, u+f05c-f05d, u+f06e, u+f070, u+f087-f088, u+f08a, u+f094, u+f096-f097, u+f09d, u+f0a0, u+f0a2, u+f0a4-f0a7, u+f0c5, u+f0c7, u+f0e5-f0e6, u+f0eb, u+f0f6-f0f8, u+f10c, u+f114-f115, u+f118-f11a, u+f11c-f11d, u+f133, u+f147, u+f14e, u+f150-f152, u+f185-f186, u+f18e, u+f190-f192, u+f196, u+f1c1-f1c9, u+f1d9, u+f1db, u+f1e3, u+f1ea, u+f1f7, u+f1f9, u+f20a, u+f247-f248, u+f24a, u+f24d, u+f255-f25b, u+f25d, u+f271-f274, u+f278, u+f27b, u+f28c, u+f28e, u+f29c, u+f2b5, u+f2b7, u+f2ba, u+f2bc, u+f2be, u+f2c0-f2c1, u+f2c3, u+f2d0, u+f2d2, u+f2d4, u+f2dc } @font-face { font-family: "FontAwesome"; font-display: block; - src: url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-v4compatibility.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-v4compatibility.ttf) format("truetype"); + src: url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-v4compatibility.woff2) format("woff2"), url(/static/fontaweso/static/fontaweso/static/fontaweso/static/fontaweso/static/fontawesome/webfonts/fa-v4compatibility.ttf) format("truetype"); unicode-range: u+f041, u+f047, u+f065-f066, u+f07d-f07e, u+f080, u+f08b, u+f08e, u+f090, u+f09a, u+f0ac, u+f0ae, u+f0b2, u+f0d0, u+f0d6, u+f0e4, u+f0ec, u+f10a-f10b, u+f123, u+f13e, u+f148-f149, u+f14c, u+f156, u+f15e, u+f160-f161, u+f163, u+f175-f178, u+f195, u+f1f8, u+f219, u+f27a } \ No newline at end of file