@echo off setlocal EnableExtensions EnableDelayedExpansion cd /d "%~dp0" set "OUTPUT_ROOT=%~f1" if "%~1"=="" set "OUTPUT_ROOT=%~dp0dist" set "ADAPTER_DIR_NAME=freecad.model.author@v1" set "ARCHIVE_NAME=freecad.model.author@v1-adapter.zip" set "PACKAGE_DIR=!OUTPUT_ROOT!\!ADAPTER_DIR_NAME!" set "ARCHIVE_PATH=!OUTPUT_ROOT!\!ARCHIVE_NAME!" set "HASH_PATH=!ARCHIVE_PATH!.sha256" where.exe tar.exe >nul 2>&1 if errorlevel 1 goto :missing_tool where.exe certutil.exe >nul 2>&1 if errorlevel 1 goto :missing_tool if not exist "!OUTPUT_ROOT!" mkdir "!OUTPUT_ROOT!" if exist "!PACKAGE_DIR!" rmdir /s /q "!PACKAGE_DIR!" if exist "!ARCHIVE_PATH!" del /f /q "!ARCHIVE_PATH!" if exist "!HASH_PATH!" del /f /q "!HASH_PATH!" mkdir "!PACKAGE_DIR!" for %%F in (adapter.json worker.py freecad_worker.py recipe.py preview_renderer.py requirements.txt acceptance.py) do ( copy /y "adapters\freecad.model.author@v1\%%F" "!PACKAGE_DIR!\%%F" >nul if errorlevel 1 goto :failed ) copy /y "..\software-contracts\freecad.model.author.v1.json" "!PACKAGE_DIR!\freecad.model.author.v1.json" >nul if errorlevel 1 goto :failed tar.exe -a -c -f "!ARCHIVE_PATH!" -C "!OUTPUT_ROOT!" "!ADAPTER_DIR_NAME!" if errorlevel 1 goto :failed set "SHA256=" for /f "tokens=*" %%H in ('certutil.exe -hashfile "!ARCHIVE_PATH!" SHA256 ^| findstr.exe /R /C:"^[0-9A-Fa-f][0-9A-Fa-f ]*[0-9A-Fa-f]$"') do set "SHA256=%%H" set "SHA256=!SHA256: =!" if not defined SHA256 goto :failed >"!HASH_PATH!" echo !SHA256! !ARCHIVE_NAME! echo [OK] Adapter package: !ARCHIVE_PATH! echo [OK] SHA256: !SHA256! exit /b 0 :missing_tool echo [ERR] Windows tar.exe and certutil.exe are required. exit /b 1 :failed echo [ERR] FreeCAD adapter packaging failed. exit /b 1