Update the default testing to use result of VCPKG.
The 3rd-party are stored in GitHub NuGet storage and reused.
The 3rd-party archive with installed 3rd-party added as an artefact
Updated the actions to work with VCPKG 3rd party
choco install -y doxygen.install
shell: pwsh
- - name: Download and extract 3rdparty dependencies
- run: |
- Invoke-WebRequest -Uri https://github.com/Open-Cascade-SAS/OCCT/releases/download/V7_9_0_beta1/3rdparty-vc14-64.zip -OutFile 3rdparty-vc14-64.zip
- Expand-Archive -Path 3rdparty-vc14-64.zip -DestinationPath .
- Remove-Item 3rdparty-vc14-64.zip
- shell: pwsh
-
- name: Configure OCCT
run: |
mkdir build
cd build
cmake -T host=x64 `
- -D USE_FREETYPE=ON `
- -D USE_TK=OFF `
-D BUILD_USE_PCH=ON `
-D BUILD_OPT_PROFILE=Production `
-D BUILD_INCLUDE_SYMLINK=ON `
-D CMAKE_BUILD_TYPE=Release `
-D BUILD_DOC_Overview=ON `
-D BUILD_DOC_RefMan=ON `
- -D 3RDPARTY_DIR=${{ github.workspace }}/3rdparty-vc14-64 `
- -D INSTALL_DIR=${{ github.workspace }}/install `
- -D USE_D3D=ON `
- -D USE_DRACO=ON `
- -D USE_FFMPEG=ON `
- -D USE_FREEIMAGE=ON `
- -D USE_GLES2=ON `
- -D USE_OPENVR=ON `
- -D USE_VTK=ON `
- -D USE_TBB=ON `
- -D USE_RAPIDJSON=ON `
- -D USE_OPENGL=ON `
+ -D BUILD_MODULE_Draw=OFF `
+ -D USE_D3D=OFF `
+ -D USE_DRACO=OFF `
+ -D USE_FFMPEG=OFF `
+ -D USE_FREEIMAGE=OFF `
+ -D USE_GLES2=OFF `
+ -D USE_OPENVR=OFF `
+ -D USE_VTK=OFF `
+ -D USE_TBB=OFF `
+ -D USE_RAPIDJSON=OFF `
+ -D USE_OPENGL=OFF `
+ -D USE_FREETYPE=OFF `
+ -D USE_TK=OFF `
+ -D USE_TCL=OFF `
-D CMAKE_CXX_FLAGS="/W4 /WX" `
-D CMAKE_C_FLAGS="/W4 /WX" ..
shell: pwsh
description: 'CMake build type (Release, Debug, etc)'
required: false
default: 'Release'
+ github-token:
+ description: 'GitHub token for vcpkg NuGet package access'
+ required: true
runs:
using: "composite"
steps:
- - name: Download and extract 3rdparty dependencies (Windows)
- if: ${{ inputs.platform == 'windows' }}
- run: |
- Invoke-WebRequest -Uri https://github.com/Open-Cascade-SAS/OCCT/releases/download/V7_9_0_beta1/3rdparty-vc14-64.zip -OutFile 3rdparty-vc14-64.zip
- Expand-Archive -Path 3rdparty-vc14-64.zip -DestinationPath .
- Remove-Item 3rdparty-vc14-64.zip
- shell: pwsh
+ - name: Setup vcpkg
+ uses: ./.github/actions/vcpkg-setup
+ with:
+ github-token: ${{ inputs.github-token }}
- name: Download and extract Mesa3D (Windows)
if: ${{ inputs.platform == 'windows' }}
.\systemwidedeploy.cmd 5
shell: cmd
- - name: Install Ninja (Windows Clang)
- if: ${{ inputs.platform == 'windows' && inputs.compiler == 'clang' }}
- run: |
- choco install ninja -y
- ninja --version
- shell: pwsh
-
- - name: Install dependencies (macOS)
- if: ${{ inputs.platform == 'macos' }}
- run: |
- brew update
- brew install tcl-tk tbb gl2ps xerces-c \
- libxmu libxi libxft libxpm \
- glew freeimage draco glfw
- shell: bash
-
- name: Install dependencies (Linux)
if: ${{ inputs.platform == 'linux' }}
- run: sudo apt-get update && sudo apt-get install -y tcl-dev tk-dev cmake ${{ inputs.compiler == 'clang' && 'clang' || 'gcc g++' }} make libbtbb-dev libx11-dev libglu1-mesa-dev tcllib tcl-thread tcl libvtk9-dev libopenvr-dev libdraco-dev libfreeimage-dev libegl1-mesa-dev libgles2-mesa-dev libfreetype-dev
+ run: sudo apt-get update && sudo apt-get install -y cmake ${{ inputs.compiler == 'clang' && 'clang' || 'gcc g++' }} make libglu1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev
shell: bash
- - name: Install rapidjson (macOS/Linux)
- if: ${{ inputs.platform == 'macos' || inputs.platform == 'linux' }}
+ - name: Install required packages (macOS)
+ if: ${{ inputs.platform == 'macos' }}
run: |
- wget https://github.com/Tencent/rapidjson/archive/858451e5b7d1c56cf8f6d58f88cf958351837e53.zip -O rapidjson.zip
- unzip rapidjson.zip
+ brew update || true
+ # temporary workaround for missing tcl-tk
+ brew install tcl-tk || true
+ # Force link any conflicting packages
+ brew link --overwrite python@3.12 || true
+ brew link --overwrite python@3.13 || true
shell: bash
- - name: Configure OCCT (Windows MSVC)
- if: ${{ inputs.platform == 'windows' && inputs.compiler == 'msvc' }}
- run: |
- mkdir build
- cd build
- cmake -T host=x64 `
- -D USE_FREETYPE=ON `
- -D USE_TK=OFF `
- -D BUILD_USE_PCH=${{ inputs.build-use-pch }} `
- -D BUILD_OPT_PROFILE=${{ inputs.build-opt-profile }} `
- -D BUILD_INCLUDE_SYMLINK=ON `
- -D CMAKE_BUILD_TYPE=${{ inputs.cmake-build-type }} `
- -D 3RDPARTY_DIR=${{ github.workspace }}/3rdparty-vc14-64 `
- -D INSTALL_DIR=${{ github.workspace }}/install `
- -D USE_D3D=ON `
- -D USE_DRACO=ON `
- -D USE_FFMPEG=ON `
- -D USE_FREEIMAGE=ON `
- -D USE_GLES2=ON `
- -D USE_OPENVR=ON `
- -D USE_VTK=${{ inputs.use-vtk }} `
- -D USE_TBB=ON `
- -D USE_RAPIDJSON=ON `
- -D USE_OPENGL=ON `
- -D BUILD_GTEST=ON `
- -D BUILD_CPP_STANDARD=C++17 `
- -D INSTALL_GTEST=ON `
- ${{ inputs.additional-cmake-flags }} ..
- shell: pwsh
-
- - name: Configure OCCT (Windows Clang)
- if: ${{ inputs.platform == 'windows' && inputs.compiler == 'clang' }}
+ - name: Configure OCCT (Windows)
+ if: ${{ inputs.platform == 'windows' }}
run: |
mkdir build
cd build
- cmake -G "Ninja" `
- -D CMAKE_C_COMPILER=clang `
- -D CMAKE_CXX_COMPILER=clang++ `
+ cmake -T ${{ inputs.compiler == 'msvc' && 'host=x64' || 'ClangCL' }} `
-D USE_FREETYPE=ON `
- -D USE_TK=OFF `
+ -D USE_TK=ON `
-D BUILD_USE_PCH=${{ inputs.build-use-pch }} `
-D BUILD_OPT_PROFILE=${{ inputs.build-opt-profile }} `
-D BUILD_INCLUDE_SYMLINK=ON `
-D CMAKE_BUILD_TYPE=${{ inputs.cmake-build-type }} `
- -D 3RDPARTY_DIR=${{ github.workspace }}/3rdparty-vc14-64 `
-D INSTALL_DIR=${{ github.workspace }}/install `
+ -D BUILD_USE_VCPKG=ON `
+ -D VCPKG_TARGET_TRIPLET=x64-windows `
-D USE_D3D=ON `
-D USE_DRACO=ON `
-D USE_FFMPEG=ON `
-D BUILD_INCLUDE_SYMLINK=ON \
-D CMAKE_BUILD_TYPE=${{ inputs.cmake-build-type }} \
-D INSTALL_DIR=${{ github.workspace }}/install \
- -D 3RDPARTY_RAPIDJSON_DIR=${{ github.workspace }}/rapidjson-858451e5b7d1c56cf8f6d58f88cf958351837e53 \
+ -D BUILD_USE_VCPKG=ON \
+ -D VCPKG_TARGET_TRIPLET=arm64-osx-dynamic \
-D USE_RAPIDJSON=ON \
-D USE_DRACO=ON \
-D USE_FREETYPE=ON \
run: |
mkdir -p build
cd build
+ # Set environment to help vcpkg find system libraries
+ export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH"
+ export CMAKE_PREFIX_PATH="/usr:/usr/local:$CMAKE_PREFIX_PATH"
cmake -G "Unix Makefiles" \
-D CMAKE_C_COMPILER=${{ inputs.compiler == 'clang' && 'clang' || 'gcc' }} \
-D CMAKE_CXX_COMPILER=${{ inputs.compiler == 'clang' && 'clang++' || 'g++' }} \
-D BUILD_USE_PCH=${{ inputs.build-use-pch }} \
-D BUILD_INCLUDE_SYMLINK=ON \
-D BUILD_OPT_PROFILE=${{ inputs.build-opt-profile }} \
- -D USE_TK=OFF \
+ -D USE_TK=ON \
-D CMAKE_BUILD_TYPE=${{ inputs.cmake-build-type }} \
-D INSTALL_DIR=${{ github.workspace }}/install \
- -D 3RDPARTY_RAPIDJSON_DIR=${{ github.workspace }}/rapidjson-858451e5b7d1c56cf8f6d58f88cf958351837e53 \
+ -D BUILD_USE_VCPKG=ON \
+ -D BUILD_LIBRARY_TYPE=Shared \
+ -D VCPKG_TARGET_TRIPLET=x64-linux-dynamic \
-D USE_FREETYPE=ON \
-D USE_DRACO=ON \
-D USE_FFMPEG=ON \
-D USE_GLES2=ON \
-D USE_OPENVR=ON \
-D USE_VTK=${{ inputs.use-vtk }} \
- -D USE_TBB=OFF \
+ -D USE_TBB=ON \
-D USE_RAPIDJSON=ON \
-D USE_OPENGL=ON \
-D BUILD_GTEST=ON \
${{ inputs.additional-cmake-flags }} ..
shell: bash
+ - name: Upload vcpkg cache
+ uses: ./.github/actions/upload-vcpkg-cache
+ with:
+ artifact-name: ${{ inputs.artifact-name }}-cache
+ build-directory: build
+
- name: Build OCCT (Windows)
if: ${{ inputs.platform == 'windows' }}
run: |
name: ${{ inputs.install-artifact-name }}
path: occt-install
+ - name: Download vcpkg cache
+ uses: ./.github/actions/download-vcpkg-cache
+ with:
+ artifact-name: ${{ inputs.install-artifact-name }}-cache
+
- name: Install Windows dependencies
if: inputs.platform == 'windows'
shell: pwsh
run: |
cd ${{ github.workspace }}/occt-install/bin
source env.sh
+
+ # Set library paths for vcpkg dependencies
+ export LD_LIBRARY_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib:${{ github.workspace }}/occt-install/lib:$LD_LIBRARY_PATH"
+ export LIBRARY_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib:${{ github.workspace }}/occt-install/lib:$LIBRARY_PATH"
+ export PKG_CONFIG_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib/pkgconfig:$PKG_CONFIG_PATH"
+
cd ${{ github.workspace }}/samples/qt
for sample in IESample Tutorial FuncDemo; do
host=`uname -s`
export STATION=$host
export RES_DIR="${{ github.workspace }}/samples/qt/${sample}/result"
- qmake $sample.pro
+
+ # Configure qmake with vcpkg paths
+ qmake $sample.pro \
+ "LIBS += -L${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib" \
+ "LIBS += -Wl,-rpath,${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib" \
+ "INCLUDEPATH += ${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/include"
+
aNbJobs="$(getconf _NPROCESSORS_ONLN)"
make -j$aNbJobs release
cd ..
name: ${{ inputs.install-artifact-name }}
path: occt-install
+ - name: Download vcpkg cache
+ uses: ./.github/actions/download-vcpkg-cache
+ with:
+ artifact-name: ${{ inputs.install-artifact-name }}-cache
+
- name: Install Windows dependencies
if: inputs.platform == 'windows'
shell: pwsh
cd inspector
mkdir build
cd build
+ export LD_LIBRARY_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib:${{ github.workspace }}/occt-install/lib:$LD_LIBRARY_PATH"
cmake -G "Unix Makefiles" \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_SHARED_LIBS=ON \
-D OpenCASCADE_DIR=${{ github.workspace }}/occt-install \
-D INSTALL_DIR=${{ github.workspace }}/inspector/install \
-D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+ -D CMAKE_LIBRARY_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib" \
+ -D CMAKE_INCLUDE_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/include" \
+ -D CMAKE_EXE_LINKER_FLAGS="-L${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib -Wl,-rpath,${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib" \
+ -D CMAKE_SHARED_LINKER_FLAGS="-L${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib -Wl,-rpath,${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib" \
..
- name: Build TInspector - Windows
shell: bash
run: |
cd inspector/build
+ # Set library paths for build and runtime
+ export LD_LIBRARY_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib:${{ github.workspace }}/occt-install/lib:$LD_LIBRARY_PATH"
+ export LIBRARY_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib:${{ github.workspace }}/occt-install/lib:$LIBRARY_PATH"
+ export PKG_CONFIG_PATH="${{ github.workspace }}/build/vcpkg_installed/x64-linux-dynamic/lib/pkgconfig:$PKG_CONFIG_PATH"
make install -j$(nproc)
- name: Upload TInspector installation
--- /dev/null
+name: 'Download vcpkg Cache'
+description: 'Download and restore vcpkg installed packages and cache'
+
+inputs:
+ artifact-name:
+ description: 'Name of the artifact containing vcpkg cache'
+ required: true
+ build-directory:
+ description: 'Build directory where vcpkg_installed should be restored'
+ required: false
+ default: 'build'
+
+runs:
+ using: "composite"
+ steps:
+
+ - name: Download vcpkg tar archive
+ uses: actions/download-artifact@v4.1.8
+ with:
+ name: ${{ inputs.artifact-name }}
+ path: ${{ inputs.build-directory }}
+
+ - name: Extract vcpkg dependencies
+ run: |
+ cd ${{ inputs.build-directory }}
+ tar -xzf vcpkg-dependencies.tar.gz
+ rm vcpkg-dependencies.tar.gz
+ shell: bash
+
+ - name: Copy manual-link libraries and set paths for Windows
+ if: runner.os == 'Windows'
+ run: |
+ $vcpkg_bin = "${{ inputs.build-directory }}/vcpkg_installed/x64-windows/bin"
+ $vcpkg_lib = "${{ inputs.build-directory }}/vcpkg_installed/x64-windows/lib"
+ $vcpkg_manual = "${{ inputs.build-directory }}/vcpkg_installed/x64-windows/lib/manual-link"
+
+ # Copy manual-link DLLs to bin directory for runtime access
+ if (Test-Path $vcpkg_manual) {
+ Write-Host "Copying manual-link libraries to bin directory"
+ Copy-Item "$vcpkg_manual\*" "$vcpkg_bin\" -Force -ErrorAction SilentlyContinue
+ }
+
+ # Set library search paths
+ $current_path = $env:PATH
+ echo "PATH=$vcpkg_bin;$vcpkg_lib;$vcpkg_manual;$current_path" >> $env:GITHUB_ENV
+ shell: pwsh
+
+ - name: Copy manual-link libraries and set paths for Linux
+ if: runner.os == 'Linux'
+ run: |
+ vcpkg_lib="${{ inputs.build-directory }}/vcpkg_installed/x64-linux-dynamic/lib"
+ vcpkg_manual="${{ inputs.build-directory }}/vcpkg_installed/x64-linux-dynamic/lib/manual-link"
+
+ # Copy manual-link libraries to main lib directory for runtime access
+ if [ -d "$vcpkg_manual" ]; then
+ echo "Copying manual-link libraries to main lib directory"
+ cp -f "$vcpkg_manual"/* "$vcpkg_lib/" 2>/dev/null || true
+ fi
+
+ # Set library search paths
+ echo "LD_LIBRARY_PATH=$vcpkg_lib:$vcpkg_manual:$LD_LIBRARY_PATH" >> $GITHUB_ENV
+ shell: bash
+
+ - name: Copy manual-link libraries and set paths for macOS
+ if: runner.os == 'macOS'
+ run: |
+ vcpkg_lib="${{ inputs.build-directory }}/vcpkg_installed/arm64-osx-dynamic/lib"
+ vcpkg_manual="${{ inputs.build-directory }}/vcpkg_installed/arm64-osx-dynamic/lib/manual-link"
+
+ # Copy manual-link libraries to main lib directory for runtime access
+ if [ -d "$vcpkg_manual" ]; then
+ echo "Copying manual-link libraries to main lib directory"
+ cp -f "$vcpkg_manual"/* "$vcpkg_lib/" 2>/dev/null || true
+ fi
+
+ # Set library search paths
+ echo "DYLD_FALLBACK_LIBRARY_PATH=$vcpkg_lib:$vcpkg_manual:$DYLD_FALLBACK_LIBRARY_PATH" >> $GITHUB_ENV
+ echo "DYLD_LIBRARY_PATH=$vcpkg_lib:$vcpkg_manual:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV
+ shell: bash
echo "failed_count={0}" >> $GITHUB_OUTPUT
', steps.check_failures_unix.outputs.failed_count) }}
- - name: Download and extract 3rdparty dependencies (Windows)
- if: ${{ inputs.platform == 'windows' && steps.check_failures.outputs.failed_count > 0 }}
- shell: pwsh
- run: |
- Invoke-WebRequest -Uri https://github.com/Open-Cascade-SAS/OCCT/releases/download/V7_9_0_beta1/3rdparty-vc14-64.zip -OutFile 3rdparty-vc14-64.zip
- Expand-Archive -Path 3rdparty-vc14-64.zip -DestinationPath .
- Remove-Item 3rdparty-vc14-64.zip
-
- - name: Install dependencies (macOS)
- if: ${{ inputs.platform == 'macos' && steps.check_failures.outputs.failed_count > 0 }}
- shell: bash
- run: |
- brew update
- brew install tcl-tk tbb gl2ps xerces-c \
- libxmu libxi libxft libxpm \
- glew freeimage draco glfw
+ - name: Download vcpkg cache
+ if: steps.check_failures.outputs.failed_count > 0
+ uses: ./.github/actions/download-vcpkg-cache
+ with:
+ artifact-name: ${{ inputs.install-artifact-name }}-cache
- name: Install dependencies (Linux)
if: ${{ inputs.platform == 'linux' && steps.check_failures.outputs.failed_count > 0 }}
shell: bash
- run: sudo apt-get update && sudo apt-get install -y tcl-dev tk-dev cmake ${{ inputs.compiler == 'clang' && 'clang' || 'gcc g++' }} make libbtbb-dev libx11-dev libglu1-mesa-dev tcllib tcl-thread tcl libvtk9-dev libopenvr-dev libdraco-dev libfreeimage-dev libegl1-mesa-dev libgles2-mesa-dev libfreetype-dev fonts-noto-cjk fonts-liberation fonts-ubuntu fonts-liberation fonts-ubuntu fonts-noto-cjk fonts-ipafont-gothic fonts-ipafont-mincho fonts-unfonts-core
+ run: sudo apt-get update && sudo apt-get install -y cmake ${{ inputs.compiler == 'clang' && 'clang' || 'gcc g++' }} make libglu1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev fonts-noto-cjk fonts-liberation fonts-ubuntu fonts-liberation fonts-ubuntu fonts-noto-cjk fonts-ipafont-gothic fonts-ipafont-mincho fonts-unfonts-core
- name: Setup Xvfb and Mesa (Linux)
if: ${{ inputs.platform == 'linux' && steps.check_failures.outputs.failed_count > 0 }}
shell: cmd
run: |
cd install
- call env.bat ${{ inputs.compiler == 'clang' && 'clang' || 'vc14' }} win64 release
+ call env.bat vc14 win64 release
DRAWEXE.exe -v -c testgrid -regress results/${{ inputs.test-directory-name }} -outdir results/${{ inputs.test-directory-name }}-retest -parallel 0
env:
LIBGL_ALWAYS_SOFTWARE: 1
shell: cmd
run: |
cd install
- call env.bat ${{ inputs.compiler == 'clang' && 'clang' || 'vc14' }} win64 release
+ call env.bat vc14 win64 release
# Repeat failed tests for 10 times
for /l %%i in (1,1,10) do (
DRAWEXE.exe -v -c testgrid -regress results/${{ inputs.test-directory-name }}-retest -outdir results/${{ inputs.test-directory-name }}-retest -parallel 0 -overwrite
if exist "*" (
xcopy /s /y /i . "..\${{ inputs.test-directory-name }}"
cd ..\..
- call env.bat ${{ inputs.compiler == 'clang' && 'clang' || 'vc14' }} win64 release
+ call env.bat vc14 win64 release
DRAWEXE.exe -v -c "testsummarize results/${{ inputs.test-directory-name }}"
) else (
echo No retest results to copy - directory is empty
name: ${{ inputs.install-artifact-name }}
path: install
- - name: Download and extract 3rdparty dependencies for Windows
- if: inputs.platform == 'windows'
- shell: pwsh
- run: |
- Invoke-WebRequest -Uri https://github.com/Open-Cascade-SAS/OCCT/releases/download/V7_9_0_beta1/3rdparty-vc14-64.zip -OutFile 3rdparty-vc14-64.zip
- Expand-Archive -Path 3rdparty-vc14-64.zip -DestinationPath .
- Remove-Item 3rdparty-vc14-64.zip
-
- - name: Install macOS dependencies
- if: inputs.platform == 'macos'
- shell: bash
- run: |
- brew update
- brew install tcl-tk tbb gl2ps xerces-c \
- libxmu libxi libxft libxpm \
- glew freeimage draco glfw
+ - name: Download vcpkg cache
+ uses: ./.github/actions/download-vcpkg-cache
+ with:
+ artifact-name: ${{ inputs.install-artifact-name }}-cache
- name: Install Linux dependencies
if: inputs.platform == 'linux'
shell: cmd
run: |
cd install
- call env.bat ${{ inputs.compiler == 'msvc' && 'vc14' || 'clang' }} win64 release
+ call env.bat vc14 win64 release
cd bin
set GTEST_OUTPUT=""
OpenCascadeGTest.exe --gtest_output=xml:gtest_results.xml > gtest_output.log 2>&1
runs:
using: "composite"
steps:
- - name: Download and extract 3rdparty dependencies (Windows)
- if: ${{ inputs.platform == 'windows' }}
- run: |
- Invoke-WebRequest -Uri https://github.com/Open-Cascade-SAS/OCCT/releases/download/V7_9_0_beta1/3rdparty-vc14-64.zip -OutFile 3rdparty-vc14-64.zip
- Expand-Archive -Path 3rdparty-vc14-64.zip -DestinationPath .
- Remove-Item 3rdparty-vc14-64.zip
- shell: pwsh
-
- - name: Install dependencies (macOS)
- if: ${{ inputs.platform == 'macos' }}
- run: |
- brew update
- brew install tcl-tk tbb gl2ps xerces-c \
- libxmu libxi libxft libxpm \
- glew freeimage draco glfw
- shell: bash
+ - name: Download vcpkg cache
+ uses: ./.github/actions/download-vcpkg-cache
+ with:
+ artifact-name: ${{ inputs.install-artifact-name }}-cache
- name: Install dependencies (Linux)
if: ${{ inputs.platform == 'linux' }}
- run: sudo apt-get update && sudo apt-get install -y tcl-dev tk-dev cmake ${{ inputs.compiler == 'gcc' && 'gcc g++' || 'clang' }} make libbtbb-dev libx11-dev libglu1-mesa-dev tcllib tcl-thread tcl libvtk9-dev libopenvr-dev libdraco-dev libfreeimage-dev libegl1-mesa-dev libgles2-mesa-dev libfreetype-dev fonts-noto-cjk fonts-liberation fonts-ubuntu fonts-liberation fonts-ubuntu fonts-noto-cjk fonts-ipafont-gothic fonts-ipafont-mincho fonts-unfonts-core
+ run: sudo apt-get update && sudo apt-get install -y cmake ${{ inputs.compiler == 'gcc' && 'gcc g++' || 'clang' }} make libglu1-mesa-dev libegl1-mesa-dev fonts-noto-cjk fonts-liberation fonts-ubuntu fonts-liberation fonts-ubuntu fonts-noto-cjk fonts-ipafont-gothic fonts-ipafont-mincho fonts-unfonts-core
shell: bash
- name: Setup Xvfb and Mesa (Linux)
if: ${{ inputs.platform == 'windows' }}
run: |
cd install
- call env.bat ${{ inputs.compiler == 'msvc' && 'vc14' || 'clang' }} win64 release
+ call env.bat vc14 win64 release
DRAWEXE.exe -v -f ${{ github.workspace }}/${{ inputs.test-script }}
shell: cmd
env:
if: ${{ inputs.platform == 'windows' }}
run: |
cd install
- call env.bat ${{ inputs.compiler == 'msvc' && 'vc14' || 'clang' }} win64 release
+ call env.bat vc14 win64 release
DRAWEXE.exe -v -c cleanuptest results/${{ inputs.test-directory-name }}
shell: cmd
env:
runs:
using: "composite"
steps:
+ - name: Download vcpkg cache
+ uses: ./.github/actions/download-vcpkg-cache
+ with:
+ artifact-name: install-linux-gcc-x64-cache
+
- name: Install dependencies
- run: sudo apt-get update && sudo apt-get install -y tcl-dev tk-dev cmake gcc g++ make libbtbb-dev libx11-dev libglu1-mesa-dev tcllib tcl-thread tcl libvtk9-dev libopenvr-dev libdraco-dev libfreeimage-dev libegl1-mesa-dev libgles2-mesa-dev libfreetype-dev
+ run: sudo apt-get update && sudo apt-get install -y cmake gcc g++ make libglu1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev
shell: bash
- name: Setup Xvfb and Mesa
"chamfer dist_angle_complex A4" \
"chamfer dist_angle_complex A5" \
"chamfer dist_angle_sequence A1" \
- "chamfer dist_angle_sequence A4"
+ "chamfer dist_angle_sequence A4" \
+ "caf basic W12" \
+ "opengles3 general msaa" \
+ "opengles3 geom interior1" \
+ "opengles3 geom interior2" \
+ "opengles3 shadows dir2" \
+ "opengles3 textures alpha_mask"
]
set exclude_str [join $exclude_list ,]
"chamfer dist_angle_complex A4" \
"chamfer dist_angle_complex A5" \
"chamfer dist_angle_sequence A1" \
- "chamfer dist_angle_sequence A4"
+ "chamfer dist_angle_sequence A4" \
+ "bugs fclasses bug30775" \
+ "caf basic W12" \
+ "opengles3 general msaa" \
+ "opengles3 geom interior1" \
+ "opengles3 geom interior2" \
+ "opengles3 shadows dir2" \
+ "opengles3 textures alpha_mask"
]
set exclude_str [join $exclude_list ,]
--- /dev/null
+name: 'Upload vcpkg Cache'
+description: 'Upload vcpkg installed packages and cache for reuse'
+
+inputs:
+ artifact-name:
+ description: 'Name of the artifact to store vcpkg cache'
+ required: true
+ build-directory:
+ description: 'Build directory containing vcpkg_installed'
+ required: false
+ default: 'build'
+
+runs:
+ using: "composite"
+ steps:
+
+ - name: Create vcpkg tar archive
+ run: |
+ cd ${{ inputs.build-directory }}
+ tar -czf vcpkg-dependencies.tar.gz \
+ --exclude='vcpkg_installed/*/debug' \
+ --exclude='vcpkg_installed/**/*.pdb' \
+ --exclude='vcpkg_installed/**/*.lib' \
+ ./vcpkg_installed/
+ shell: bash
+
+ - name: Upload vcpkg tar archive
+ uses: actions/upload-artifact@v4.4.3
+ with:
+ name: ${{ inputs.artifact-name }}
+ path: ${{ inputs.build-directory }}/vcpkg-dependencies.tar.gz
+ retention-days: 7
+ compression-level: 1
--- /dev/null
+name: 'Setup vcpkg'
+description: 'Setup vcpkg dependencies for OCCT build on a specific platform'
+
+inputs:
+ vcpkg-tag:
+ description: 'vcpkg tag to checkout'
+ required: false
+ default: '2025.06.13'
+ github-token:
+ description: 'GitHub token for NuGet package access'
+ required: true
+
+runs:
+ using: "composite"
+ steps:
+ - name: Set environment variables
+ run: |
+ echo "USERNAME=Open-Cascade-SAS" >> $GITHUB_ENV
+ echo "VCPKG_ROOT=${{ github.workspace }}/vcpkg" >> $GITHUB_ENV
+ echo "VCPKG_EXE=${{ github.workspace }}/vcpkg/vcpkg" >> $GITHUB_ENV
+ echo "FEED_URL=https://nuget.pkg.github.com/Open-Cascade-SAS/index.json" >> $GITHUB_ENV
+ echo "VCPKG_BINARY_SOURCES=clear;nuget,https://nuget.pkg.github.com/Open-Cascade-SAS/index.json,readwrite" >> $GITHUB_ENV
+ echo "VCPKG_FEATURE_FLAGS=binarycaching,manifests,versions" >> $GITHUB_ENV
+ echo "VCPKG_DISABLE_COMPILER_TRACKING=1" >> $GITHUB_ENV
+ shell: bash
+ if: runner.os != 'Windows'
+
+ - name: Set environment variables (Windows)
+ run: |
+ echo "USERNAME=Open-Cascade-SAS" >> $env:GITHUB_ENV
+ echo "VCPKG_ROOT=${{ github.workspace }}/vcpkg" >> $env:GITHUB_ENV
+ echo "VCPKG_EXE=${{ github.workspace }}/vcpkg/vcpkg" >> $env:GITHUB_ENV
+ echo "FEED_URL=https://nuget.pkg.github.com/Open-Cascade-SAS/index.json" >> $env:GITHUB_ENV
+ echo "VCPKG_BINARY_SOURCES=clear;nuget,https://nuget.pkg.github.com/Open-Cascade-SAS/index.json,readwrite" >> $env:GITHUB_ENV
+ echo "VCPKG_FEATURE_FLAGS=binarycaching,manifests,versions" >> $env:GITHUB_ENV
+ echo "VCPKG_DISABLE_COMPILER_TRACKING=1" >> $env:GITHUB_ENV
+ shell: pwsh
+ if: runner.os == 'Windows'
+
+ - name: Install required packages (Linux)
+ if: runner.os == 'Linux'
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y build-essential ninja-build curl zip unzip tar nasm autoconf mono-complete \
+ libx11-dev \
+ libxi-dev \
+ libxext-dev \
+ mesa-common-dev \
+ libglu1-mesa-dev \
+ libegl1-mesa-dev \
+ libgles2-mesa-dev
+ shell: bash
+
+ - name: Install required packages (macOS)
+ if: runner.os == 'macOS'
+ run: |
+ brew update || true
+ brew install cmake ninja nasm autoconf automake mono || true
+ brew install --cask xquartz || true
+ shell: bash
+
+ - name: Set up vcpkg (Unix)
+ if: runner.os != 'Windows'
+ run: |
+ git clone https://github.com/microsoft/vcpkg.git
+ cd vcpkg
+ git checkout ${{ inputs.vcpkg-tag }}
+ ./bootstrap-vcpkg.sh
+ shell: bash
+
+ - name: Set up vcpkg (Windows)
+ if: runner.os == 'Windows'
+ run: |
+ git clone https://github.com/microsoft/vcpkg.git
+ cd vcpkg
+ git checkout ${{ inputs.vcpkg-tag }}
+ .\bootstrap-vcpkg.bat
+ shell: cmd
+
+ - name: Add NuGet sources
+ if: runner.os == 'Windows'
+ run: |
+ .$(${{ env.VCPKG_EXE }} fetch nuget) `
+ sources add `
+ -Source "${{ env.FEED_URL }}" `
+ -StorePasswordInClearText `
+ -Name GitHubPackages `
+ -UserName "${{ env.USERNAME }}" `
+ -Password "${{ inputs.github-token }}"
+ .$(${{ env.VCPKG_EXE }} fetch nuget) `
+ setapikey "${{ inputs.github-token }}" `
+ -Source "${{ env.FEED_URL }}"
+ shell: pwsh
+
+ - name: Add NuGet sources
+ if: runner.os != 'Windows'
+ run: |
+ mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
+ sources add \
+ -Source "${{ env.FEED_URL }}" \
+ -StorePasswordInClearText \
+ -Name GitHubPackages \
+ -UserName "${{ env.USERNAME }}" \
+ -Password "${{ inputs.github-token }}"
+ mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
+ setapikey "${{ inputs.github-token }}" \
+ -Source "${{ env.FEED_URL }}"
+ shell: bash
platform: windows
compiler: msvc
artifact-name: install-windows-x64
+ github-token: ${{ secrets.GITHUB_TOKEN }}
prepare-and-build-windows-clang-x64:
name: Prepare and Build on Windows with Clang (x64)
compiler: clang
artifact-name: install-windows-clang-x64
use-vtk: 'false'
+ github-token: ${{ secrets.GITHUB_TOKEN }}
prepare-and-build-macos-x64:
name: Prepare and Build on macOS with Clang (x64)
platform: macos
compiler: clang
artifact-name: install-macos-x64
+ github-token: ${{ secrets.GITHUB_TOKEN }}
prepare-and-build-macos-gcc-x64:
name: Prepare and Build on macOS with GCC (x64)
platform: macos
compiler: gcc
artifact-name: install-macos-gcc-x64
+ github-token: ${{ secrets.GITHUB_TOKEN }}
prepare-and-build-linux-clang-x64:
name: Prepare and Build on Ubuntu with Clang (x64)
platform: linux
compiler: clang
artifact-name: install-linux-clang-x64
+ github-token: ${{ secrets.GITHUB_TOKEN }}
prepare-and-build-macos-clang-no-pch:
name: Prepare and Build on macOS with Clang (No PCH)
build-opt-profile: 'Default'
additional-cmake-flags: '-D CMAKE_CXX_FLAGS="-Werror -Wall -Wextra" -D CMAKE_C_FLAGS="-Werror -Wall -Wextra"'
cmake-build-type: 'Debug'
+ github-token: ${{ secrets.GITHUB_TOKEN }}
prepare-and-build-linux-gcc-x64:
name: Prepare and Build on Ubuntu with GCC (x64)
platform: linux
compiler: gcc
artifact-name: install-linux-gcc-x64
+ github-token: ${{ secrets.GITHUB_TOKEN }}
build-inspector-windows:
name: Build TInspector on Windows
# the platform specific variables.
if (BUILD_USE_VCPKG)
project (OCCT)
+ if (APPLE)
+ # set Apple specific variables
+ occt_set_apple_csf_vars()
+ endif()
endif()
# copying clang-format file to the root of the project
# vcpkg processing
if (BUILD_USE_VCPKG)
find_package (draco CONFIG REQUIRED)
-
- set (3RDPARTY_DRACO_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}")
- SEARCH_DRACO_LIB()
-
- list (APPEND 3RDPARTY_INCLUDE_DIRS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/draco")
+ set(CSF_Draco draco::draco)
return()
endif()
set (CSF_OpenGlLibs "opengl32.lib")
set (CSF_OpenGlesLibs "libEGL libGLESv2")
else()
-
if (APPLE)
- set (CSF_objc "objc")
-
- # frameworks
- if (IOS)
- find_library (Appkit_LIB NAMES UIKit)
- set (CSF_Appkit ${Appkit_LIB})
- else()
- find_library (Appkit_LIB NAMES AppKit)
- set (CSF_Appkit ${Appkit_LIB})
- endif()
- OCCT_CHECK_AND_UNSET (Appkit_LIB)
-
- find_library (IOKit_LIB NAMES IOKit)
- set (CSF_IOKit ${IOKit_LIB})
- OCCT_CHECK_AND_UNSET (IOKit_LIB)
-
- if (IOS)
- find_library (OpenGlesLibs_LIB NAMES OpenGLES)
- set (CSF_OpenGlesLibs ${OpenGlesLibs_LIB})
- OCCT_CHECK_AND_UNSET (OpenGlesLibs_LIB)
- elseif (USE_XLIB)
- set (CSF_OpenGlLibs "GL")
- set (CSF_XwLibs "X11")
- else()
- find_library (OpenGlLibs_LIB NAMES OpenGL)
- set (CSF_OpenGlLibs ${OpenGlLibs_LIB})
- OCCT_CHECK_AND_UNSET (OpenGlLibs_LIB)
- endif()
-
+ # Will be called later
elseif (EMSCRIPTEN)
set (CSF_ThreadLibs "pthread rt stdc++")
set (CSF_OpenGlesLibs "EGL GLESv2")
set (CSF_OpenGlesLibs "EGL GLESv2")
set (CSF_dl "dl")
if (USE_FREETYPE)
- set (CSF_fontconfig "fontconfig")
+ set (CSF_fontconfig "fontconfig expat")
endif()
endif()
endif()
+
+# Updates APPLE variables
+function(occt_set_apple_csf_vars)
+ set (CSF_objc "objc" PARENT_SCOPE)
+
+ # frameworks
+ if (IOS)
+ find_library (Appkit_LIB NAMES UIKit)
+ if (Appkit_LIB)
+ set (CSF_Appkit ${Appkit_LIB} PARENT_SCOPE)
+ else()
+ set (CSF_Appkit "UIKit" PARENT_SCOPE)
+ endif()
+ else()
+ find_library (Appkit_LIB NAMES AppKit)
+ if (Appkit_LIB)
+ set (CSF_Appkit ${Appkit_LIB} PARENT_SCOPE)
+ else()
+ set (CSF_Appkit "AppKit" PARENT_SCOPE)
+ endif()
+ endif()
+ OCCT_CHECK_AND_UNSET (Appkit_LIB)
+
+ find_library (IOKit_LIB NAMES IOKit)
+ if (IOKit_LIB)
+ set (CSF_IOKit ${IOKit_LIB} PARENT_SCOPE)
+ else()
+ set (CSF_IOKit "IOKit" PARENT_SCOPE)
+ endif()
+ OCCT_CHECK_AND_UNSET (IOKit_LIB)
+
+ if (IOS)
+ find_library (OpenGlesLibs_LIB NAMES OpenGLES)
+ if (OpenGlesLibs_LIB)
+ set (CSF_OpenGlesLibs ${OpenGlesLibs_LIB} PARENT_SCOPE)
+ else()
+ set (CSF_OpenGlesLibs "OpenGLES" PARENT_SCOPE)
+ endif()
+ OCCT_CHECK_AND_UNSET (OpenGlesLibs_LIB)
+ elseif (USE_XLIB)
+ set (CSF_OpenGlLibs "GL" PARENT_SCOPE)
+ set (CSF_XwLibs "X11" PARENT_SCOPE)
+ else()
+ find_library (OpenGlLibs_LIB NAMES OpenGL)
+ if (OpenGlLibs_LIB)
+ set (CSF_OpenGlLibs ${OpenGlLibs_LIB} PARENT_SCOPE)
+ else()
+ set (CSF_OpenGlLibs "OpenGL" PARENT_SCOPE)
+ endif()
+ OCCT_CHECK_AND_UNSET (OpenGlLibs_LIB)
+ endif()
+endfunction()
if (BUILD_USE_VCPKG)
set (3RDPARTY_TCL_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" CACHE PATH "The directory containing tcl" FORCE)
set (3RDPARTY_TCL_INCLUDE_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include" CACHE FILEPATH "The directory containing headers of tcl" FORCE)
+ set (3RDPARTY_TCL_LIBRARY_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" CACHE FILEPATH "The directory containing tcl library" FORCE)
endif()
# tcl library file (with absolute path)
if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_TCL_LIBRARY_DIR}")
-else()
+elseif(NOT BUILD_USE_VCPKG)
list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_TCL_LIBRARY_DIR)
endif()
+++ /dev/null
-diff --git a/win/makefile.vc b/win/makefile.vc
-index c88c0ec3dc..6c9dd624d7 100644
---- a/win/makefile.vc
-+++ b/win/makefile.vc
-@@ -466,13 +466,13 @@ TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
- # release - Everything that builds as part of a release
- #---------------------------------------------------------------------
-
--release: setup $(TCLSH) $(TCLSTUBLIB) dlls pkgs
-+release: setup $(TCLSH) $(TCLSTUBLIB) dlls pkgs tk-build
- all: setup $(TCLSH) $(TCLSTUBLIB) dlls $(CAT32) pkgs
- core: setup $(TCLLIB) $(TCLSTUBLIB)
- shell: setup $(TCLSH)
- dlls: setup $(TCLREGLIB) $(TCLDDELIB) $(OUT_DIR)\zlib1.dll
- tcltest: setup $(TCLTEST) dlls $(CAT32)
--install: install-binaries install-libraries install-docs install-pkgs
-+install: install-binaries install-libraries install-docs install-pkgs tk-build tk-install
- !if $(SYMBOLS)
- install: install-pdbs
- !endif
-@@ -569,6 +569,24 @@ pkgs:
- popd \
- )
-
-+tk-build:
-+!if defined(TKDIR) && defined(INSTALLDIR)
-+ @if exist "$(TKDIR)\win\makefile.vc" ( \
-+ pushd "$(TKDIR)\win" & \
-+ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) INSTALLDIR=$(INSTALLDIR) OPTS=$(OPTS) STATS=$(STATS) CHECKS=$(CHECKS) MACHINE=$(MACHINE) &\
-+ popd \
-+ )
-+!endif
-+
-+tk-install:
-+!if defined(TKDIR) && defined(INSTALLDIR)
-+ @if exist "$(TKDIR)\win\makefile.vc" ( \
-+ pushd "$(TKDIR)\win" & \
-+ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) INSTALLDIR=$(INSTALLDIR) OPTS=$(OPTS) STATS=$(STATS) CHECKS=$(CHECKS) MACHINE=$(MACHINE) install &\
-+ popd \
-+ )
-+!endif
-+
- test-pkgs:
- @for /d %d in ($(PKGSDIR)\*) do \
- @if exist "%~fd\win\makefile.vc" ( \
---
-2.47.1.windows.2
-
--- /dev/null
+From da6b5b83ef997f550155d9087c5e7b289168fb1b Mon Sep 17 00:00:00 2001
+From: dpasukhi <dpasukhi@opencascade.com>
+Date: Sat, 5 Jul 2025 11:36:01 +0100
+Subject: [PATCH] Add support for building and installing Tk in Makefiles for
+ Unix and Windows
+
+---
+ unix/Makefile.in | 94 +++++++++++++++++++++++++++++++++++++++++++++--
+ win/Makefile.in | 68 ++++++++++++++++++++++++++++++++++
+ win/makefile.vc | 96 +++++++++++++++++++++++++++++++++++++++++++++---
+ 3 files changed, 249 insertions(+), 9 deletions(-)
+
+diff --git a/unix/Makefile.in b/unix/Makefile.in
+index bc743b3892..dfdcf35acd 100644
+--- a/unix/Makefile.in
++++ b/unix/Makefile.in
+@@ -232,6 +232,7 @@ TOOL_DIR = $(TOP_DIR)/tools
+ UNIX_DIR = $(TOP_DIR)/unix
+ MAC_OSX_DIR = $(TOP_DIR)/macosx
+ PKGS_DIR = $(TOP_DIR)/pkgs
++EXTRADIR = $(TOP_DIR)/extra
+ # Must be absolute because of the cd dltest $(DLTEST_DIR)/configure below.
+ DLTEST_DIR = @TCL_SRC_DIR@/unix/dltest
+ # Must be absolute to so the corresponding tcltest's tcl_library is absolute.
+@@ -622,7 +623,7 @@ SRCS = $(GENERIC_SRCS) $(UNIX_SRCS) $(NOTIFY_SRCS) \
+ # Start of rules
+ #--------------------------------------------------------------------------
+
+-all: binaries libraries doc packages
++all: binaries libraries doc packages extra
+
+ binaries: ${LIB_FILE} ${TCL_EXE}
+
+@@ -666,13 +667,13 @@ Makefile: $(UNIX_DIR)/Makefile.in $(DLTEST_DIR)/Makefile.in
+ #tclConfig.h: $(UNIX_DIR)/tclConfig.h.in
+ # $(SHELL) config.status
+
+-clean: clean-packages
++clean: clean-packages clean-extra
+ rm -rf *.a *.o libtcl* core errs *~ \#* TAGS *.E a.out \
+ errors ${TCL_EXE} ${TCLTEST_EXE} lib.exp Tcl @DTRACE_HDR@ \
+ minizip${HOST_EXEEXT} *.${HOST_OBJEXT} *.zip *.vfs
+ (cd dltest ; $(MAKE) clean)
+
+-distclean: distclean-packages clean
++distclean: distclean-packages clean distclean-extra
+ rm -rf Makefile config.status config.cache config.log tclConfig.sh \
+ tclConfig.h *.plist Tcl.framework tcl.pc tclUuid.h
+ (cd dltest ; $(MAKE) distclean)
+@@ -795,7 +796,7 @@ INSTALL_EXTRA_TARGETS = @EXTRA_INSTALL@
+ INSTALL_TARGETS = $(INSTALL_BASE_TARGETS) $(INSTALL_DOC_TARGETS) $(INSTALL_DEV_TARGETS) \
+ $(INSTALL_PACKAGE_TARGETS) $(INSTALL_EXTRA_TARGETS)
+
+-install: $(INSTALL_TARGETS)
++install: $(INSTALL_TARGETS) install-extra
+
+ install-strip:
+ $(MAKE) $(INSTALL_TARGETS) \
+@@ -1725,6 +1726,7 @@ PKG_CFG_ARGS = @PKG_CFG_ARGS@
+ # cannot use absolute paths due to issues in nested configure when path to
+ # build dir contains spaces).
+ PKG_DIR = ./pkgs
++EXTRA_BUILD_DIR = ./extra
+
+ configure-packages:
+ @for i in $(PKGS_DIR)/*; do \
+@@ -2151,6 +2153,89 @@ BUILD_HTML = \
+ --useversion=$(HTML_VERSION) --htmldir="$(HTML_INSTALL_DIR)" \
+ --srcdir=$(TOP_DIR)/.. $(BUILD_HTML_FLAGS)
+
++#--------------------------------------------------------------------------
++# Extra packages build targets (for TK and other extras)
++#--------------------------------------------------------------------------
++
++extra:
++ @if test -d "$(EXTRADIR)"; then \
++ for extradir in $(EXTRADIR)/*; do \
++ if test -d "$$extradir/unix" && test -f "$$extradir/unix/configure"; then \
++ extrapkg=`basename $$extradir`; \
++ echo "Building extra package '$$extrapkg'"; \
++ mkdir -p "$(EXTRA_BUILD_DIR)/$$extrapkg"; \
++ TCL_BUILD_DIR="`pwd`"; \
++ if test ! -f "$(EXTRA_BUILD_DIR)/$$extrapkg/Makefile"; then \
++ echo "Configuring extra package '$$extrapkg'"; \
++ (cd "$(EXTRA_BUILD_DIR)/$$extrapkg" && \
++ "$$extradir/unix/configure" \
++ --prefix="$(prefix)" \
++ --exec-prefix="$(exec_prefix)" \
++ --with-tcl="$$TCL_BUILD_DIR" \
++ CFLAGS="$(CFLAGS)" \
++ CPPFLAGS="$(CPPFLAGS)" \
++ LDFLAGS="$(LDFLAGS)" \
++ CC="$(CC)") || exit $$?; \
++ fi; \
++ echo "Building extra package '$$extrapkg'"; \
++ (cd "$(EXTRA_BUILD_DIR)/$$extrapkg" && \
++ $(MAKE) \
++ TCL_LIBRARY=$(TCL_LIBRARY) \
++ CFLAGS="$(CFLAGS)" \
++ CPPFLAGS="$(CPPFLAGS)" \
++ LDFLAGS="$(LDFLAGS)" \
++ CC="$(CC)") || exit $$?; \
++ fi; \
++ done; \
++ else \
++ echo "No extra directory found at $(EXTRADIR) - skipping extra builds"; \
++ fi
++
++install-extra:
++ @if test -d "$(EXTRADIR)"; then \
++ for extradir in $(EXTRADIR)/*; do \
++ if test -d "$$extradir/unix" && test -f "$$extradir/unix/configure"; then \
++ extrapkg=`basename $$extradir`; \
++ if test -f "$(EXTRA_BUILD_DIR)/$$extrapkg/Makefile"; then \
++ echo "Installing extra package '$$extrapkg'"; \
++ (cd "$(EXTRA_BUILD_DIR)/$$extrapkg" && $(MAKE) install \
++ DESTDIR="$(INSTALL_ROOT)" \
++ prefix="$(prefix)" \
++ exec_prefix="$(exec_prefix)" \
++ TCL_LIBRARY=$(TCL_LIBRARY) \
++ CFLAGS="$(CFLAGS)" \
++ CPPFLAGS="$(CPPFLAGS)" \
++ LDFLAGS="$(LDFLAGS)" \
++ CC="$(CC)") || exit $$?; \
++ fi; \
++ fi; \
++ done; \
++ else \
++ echo "No extra directory found - skipping extra installs"; \
++ fi
++
++clean-extra:
++ @if test -d "$(EXTRA_BUILD_DIR)"; then \
++ for extrapkg in $(EXTRA_BUILD_DIR)/*; do \
++ if test -d "$$extrapkg" && test -f "$$extrapkg/Makefile"; then \
++ echo "Cleaning extra package in $$extrapkg"; \
++ (cd "$$extrapkg" && $(MAKE) clean) || exit $$?; \
++ fi; \
++ done; \
++ fi
++
++distclean-extra:
++ @if test -d "$(EXTRA_BUILD_DIR)"; then \
++ for extrapkg in $(EXTRA_BUILD_DIR)/*; do \
++ if test -d "$$extrapkg" && test -f "$$extrapkg/Makefile"; then \
++ echo "Distcleaning extra package in $$extrapkg"; \
++ (cd "$$extrapkg" && $(MAKE) distclean) || exit $$?; \
++ fi; \
++ rm -rf "$$extrapkg"; \
++ done; \
++ rm -rf "$(EXTRA_BUILD_DIR)"; \
++ fi
++
+ #--------------------------------------------------------------------------
+ # The list of all the targets that do not correspond to real files. This stops
+ # 'make' from getting confused when someone makes an error in a rule.
+@@ -2166,6 +2251,7 @@ BUILD_HTML = \
+ .PHONY: install-tzdata install-msgs
+ .PHONY: packages configure-packages test-packages clean-packages
+ .PHONY: dist-packages distclean-packages install-packages
++.PHONY: extra install-extra clean-extra distclean-extra
+
+ #--------------------------------------------------------------------------
+ # DO NOT DELETE THIS LINE -- make depend depends on it.
+diff --git a/win/Makefile.in b/win/Makefile.in
+index 8dd107670f..f0cf267329 100644
+--- a/win/Makefile.in
++++ b/win/Makefile.in
+@@ -129,6 +129,11 @@ ROOT_DIR_WIN_NATIVE = $(shell cd '$(ROOT_DIR)' ; pwd -W 2>/dev/null || pwd -P)
+ ZLIB_DIR_NATIVE = $(shell $(CYGPATH) '$(ZLIB_DIR)')
+ TOMMATH_DIR_NATIVE = $(shell $(CYGPATH) '$(TOMMATH_DIR)')
+
++# Tk-related directories (TKDIR can be set by user)
++TK_SRC_DIR = $(TKDIR)
++TK_BUILD_TOP = $(TKDIR)/win
++CONFIG_INSTALL_DIR = $(LIB_INSTALL_DIR)
++
+ # Fully qualify library path so that `make test`
+ # does not depend on the current directory.
+ LIBRARY_DIR1 = $(shell cd '$(ROOT_DIR_NATIVE)/library' ; pwd -P)
+@@ -432,6 +437,34 @@ TCL_OBJS = ${GENERIC_OBJS} ${WIN_OBJS} @ZLIB_OBJS@ $(TOMMATH_OBJS)
+ TCL_DOCS = "$(ROOT_DIR_NATIVE)"/doc/*.[13n]
+
+ all: binaries libraries doc packages
++ @if test -n "$(TKDIR)" && test -d "$(TKDIR)"; then \
++ echo "TKDIR detected - automatically building Tk..."; \
++ echo "========== TK BUILD PARAMETERS =========="; \
++ echo "TKDIR=$(TKDIR)"; \
++ echo "TCLDIR=$(TOP_DIR)"; \
++ echo "prefix=$(prefix)"; \
++ echo "exec_prefix=$(exec_prefix)"; \
++ echo "TCL_TCLSH=$(BIN_INSTALL_DIR)/tclsh$(VER)${EXESUFFIX}"; \
++ echo "=========================================="; \
++ if test -f "$(TK_BUILD_TOP)/Makefile"; then \
++ echo "Building Tk using existing Makefile..."; \
++ (cd "$(TK_BUILD_TOP)" && $(MAKE)) || exit $$?; \
++ elif test -f "$(TK_SRC_DIR)/win/configure"; then \
++ echo "Configuring and building Tk..."; \
++ mkdir -p "$(TK_BUILD_TOP)"; \
++ (cd "$(TK_BUILD_TOP)" && \
++ "$(TK_SRC_DIR)/win/configure" \
++ --prefix="$(prefix)" \
++ --exec-prefix="$(exec_prefix)" \
++ --with-tcl="$(CONFIG_INSTALL_DIR)" && \
++ $(MAKE)) || exit $$?; \
++ else \
++ echo "ERROR: Tk configure script not found at $(TK_SRC_DIR)/win/configure"; \
++ exit 1; \
++ fi; \
++ else \
++ echo "TKDIR not set or directory does not exist - skipping Tk build"; \
++ fi
+
+ # Test-suite helper (can be used to test Tcl from build directory with all expected modules).
+ # To start from windows shell use:
+@@ -648,6 +681,27 @@ gentommath_h:
+ > "$(GENERIC_DIR_NATIVE)/tclTomMath.h"
+
+ install: all install-binaries install-libraries install-doc install-packages
++ @if test -n "$(TKDIR)" && test -d "$(TKDIR)"; then \
++ echo "TKDIR detected - automatically installing Tk..."; \
++ echo "========== TK INSTALL PARAMETERS =========="; \
++ echo "TKDIR=$(TKDIR)"; \
++ echo "TCLDIR=$(TOP_DIR)"; \
++ echo "prefix=$(prefix)"; \
++ echo "exec_prefix=$(exec_prefix)"; \
++ echo "DESTDIR=$(INSTALL_ROOT)"; \
++ echo "TCL_TCLSH=$(BIN_INSTALL_DIR)/tclsh$(VER)${EXESUFFIX}"; \
++ echo "==========================================="; \
++ if test -f "$(TK_BUILD_TOP)/Makefile"; then \
++ echo "Installing Tk..."; \
++ (cd "$(TK_BUILD_TOP)" && $(MAKE) install DESTDIR="$(INSTALL_ROOT)") || exit $$?; \
++ else \
++ echo "ERROR: Tk Makefile not found at $(TK_BUILD_TOP)/Makefile"; \
++ echo "Please run 'make all' first to build Tk"; \
++ exit 1; \
++ fi; \
++ else \
++ echo "TKDIR not set or directory does not exist - skipping Tk install"; \
++ fi
+
+ install-binaries: binaries
+ @for i in "$(LIB_INSTALL_DIR)" "$(BIN_INSTALL_DIR)"; \
+@@ -848,10 +902,24 @@ clean: cleanhelp clean-packages
+ $(RM) $(TCLSH) $(CAT32) $(TEST_EXE_FILE) $(TEST_DLL_FILE) tcltest.cmd tcltest.sh
+ $(RM) *.pch *.ilk *.pdb *.zip
+ $(RMDIR) *.vfs
++ @if test -n "$(TKDIR)" && test -d "$(TKDIR)" && test -f "$(TK_BUILD_TOP)/Makefile"; then \
++ echo "TKDIR detected - automatically cleaning Tk..."; \
++ echo "Cleaning Tk build..."; \
++ (cd "$(TK_BUILD_TOP)" && $(MAKE) clean) || exit $$?; \
++ else \
++ echo "TKDIR not set, directory does not exist, or no Tk build to clean"; \
++ fi
+
+ distclean: distclean-packages clean
+ $(RM) Makefile config.status config.cache config.log tclConfig.sh \
+ tcl.hpj config.status.lineno tclsh.exe.manifest tclUuid.h
++ @if test -n "$(TKDIR)" && test -d "$(TKDIR)" && test -f "$(TK_BUILD_TOP)/Makefile"; then \
++ echo "TKDIR detected - automatically distcleaning Tk..."; \
++ echo "Distcleaning Tk build..."; \
++ (cd "$(TK_BUILD_TOP)" && $(MAKE) distclean) || exit $$?; \
++ else \
++ echo "TKDIR not set, directory does not exist, or no Tk build to distclean"; \
++ fi
+
+ #
+ # Bundled package targets
+diff --git a/win/makefile.vc b/win/makefile.vc
+index c88c0ec3dc..cbdad89ba8 100644
+--- a/win/makefile.vc
++++ b/win/makefile.vc
+@@ -420,6 +420,7 @@ TCLSTUBOBJS = \
+ ### the left side of implicit rules.
+ TOMMATHDIR = $(ROOT)\libtommath
+ PKGSDIR = $(ROOT)\pkgs
++WINDIR = $(ROOT)\win
+
+ # Additional include and C macro definitions for the implicit rules
+ # defined in rules.vc
+@@ -438,6 +439,7 @@ TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+ !endif
+
+
++
+ #---------------------------------------------------------------------
+ # Project specific targets
+ # There are 4 primary build configurations to consider from the combination
+@@ -466,18 +468,24 @@ TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+ # release - Everything that builds as part of a release
+ #---------------------------------------------------------------------
+
+-release: setup $(TCLSH) $(TCLSTUBLIB) dlls pkgs
+-all: setup $(TCLSH) $(TCLSTUBLIB) dlls $(CAT32) pkgs
++release: setup $(TCLSH) $(TCLSTUBLIB) dlls setpath pkgs tk-build
++all: setup $(TCLSH) $(TCLSTUBLIB) dlls $(CAT32) setpath pkgs
+ core: setup $(TCLLIB) $(TCLSTUBLIB)
+ shell: setup $(TCLSH)
+ dlls: setup $(TCLREGLIB) $(TCLDDELIB) $(OUT_DIR)\zlib1.dll
+ tcltest: setup $(TCLTEST) dlls $(CAT32)
+-install: install-binaries install-libraries install-docs install-pkgs
++install: setpath install-binaries install-libraries install-docs install-pkgs tk-build tk-install
+ !if $(SYMBOLS)
+ install: install-pdbs
+ !endif
+ setup: default-setup
+
++# Add TCL win directory to PATH for current session
++setpath:
++ @echo Adding $(WINDIR) to PATH
++ @set PATH=$(WINDIR);$(PATH)
++ @echo PATH updated for current session
++
+ test: test-core test-pkgs
+ test-core: setup $(TCLTEST) dlls $(CAT32)
+ set TCL_LIBRARY=$(ROOT:\=/)/library
+@@ -569,6 +577,84 @@ pkgs:
+ popd \
+ )
+
++tk-build:
++!if defined(TKDIR)
++ @echo TKDIR detected - building Tk...
++ @echo ========== TK BUILD PARAMETERS ==========
++ @echo TKDIR=$(TKDIR)
++ @echo TCLDIR=$(ROOT)
++!if defined(INSTALLDIR)
++ @echo INSTALLDIR=$(INSTALLDIR)
++!endif
++ @echo OPTS=$(OPTS)
++ @echo STATS=$(STATS)
++ @echo CHECKS=$(CHECKS)
++ @echo MACHINE=$(MACHINE)
++ @echo ==========================================
++ @if exist "$(TKDIR)\win\makefile.vc" ( \
++ pushd "$(TKDIR)\win" & \
++ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) OPTS=$(OPTS) STATS=$(STATS) CHECKS=$(CHECKS) MACHINE=$(MACHINE) & \
++ popd \
++ ) else ( \
++ echo ERROR: Tk makefile.vc not found at $(TKDIR)\win\makefile.vc & \
++ exit 1 \
++ )
++!else
++ @echo TKDIR not set or directory does not exist - skipping Tk build
++!endif
++
++tk-install:
++!if defined(TKDIR) && defined(INSTALLDIR)
++ @echo TKDIR detected - installing Tk...
++ @echo ========== TK INSTALL PARAMETERS ==========
++ @echo TKDIR=$(TKDIR)
++ @echo TCLDIR=$(ROOT)
++ @echo INSTALLDIR=$(INSTALLDIR)
++ @echo OPTS=$(OPTS)
++ @echo STATS=$(STATS)
++ @echo CHECKS=$(CHECKS)
++ @echo MACHINE=$(MACHINE)
++ @echo ===========================================
++ @if exist "$(TKDIR)\win\makefile.vc" ( \
++ pushd "$(TKDIR)\win" & \
++ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) INSTALLDIR=$(INSTALLDIR) OPTS=$(OPTS) STATS=$(STATS) CHECKS=$(CHECKS) MACHINE=$(MACHINE) install & \
++ popd \
++ ) else ( \
++ echo ERROR: Tk makefile.vc not found at $(TKDIR)\win\makefile.vc & \
++ exit 1 \
++ )
++!else
++ @echo TKDIR not set, INSTALLDIR not set, or directory does not exist - skipping Tk install
++!endif
++
++tk-clean:
++!if defined(TKDIR)
++ @echo TKDIR detected - cleaning Tk build...
++ @if exist "$(TKDIR)\win\makefile.vc" ( \
++ pushd "$(TKDIR)\win" & \
++ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) clean & \
++ popd \
++ ) else ( \
++ echo No Tk makefile found to clean \
++ )
++!else
++ @echo TKDIR not set or directory does not exist - skipping Tk clean
++!endif
++
++tk-distclean:
++!if defined(TKDIR)
++ @echo TKDIR detected - distcleaning Tk build...
++ @if exist "$(TKDIR)\win\makefile.vc" ( \
++ pushd "$(TKDIR)\win" & \
++ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) distclean & \
++ popd \
++ ) else ( \
++ echo No Tk makefile found to distclean \
++ )
++!else
++ @echo TKDIR not set or directory does not exist - skipping Tk distclean
++!endif
++
+ test-pkgs:
+ @for /d %d in ($(PKGSDIR)\*) do \
+ @if exist "%~fd\win\makefile.vc" ( \
+@@ -1058,8 +1144,8 @@ tidy:
+ @echo Removing $(TCLREGLIB) ...
+ @if exist $(TCLREGLIB) del $(TCLREGLIB)
+
+-clean: default-clean clean-pkgs
+-hose: default-hose hose-pkgs
++clean: default-clean clean-pkgs tk-clean
++hose: default-hose hose-pkgs tk-distclean
+ realclean: hose
+ .PHONY:
+
+--
+2.43.0
+
+++ /dev/null
-diff --git a/win/makefile.vc b/win/makefile.vc
-index 6c9dd624d7..d29185feed 100644
---- a/win/makefile.vc
-+++ b/win/makefile.vc
-@@ -420,6 +420,7 @@ TCLSTUBOBJS = \
- ### the left side of implicit rules.
- TOMMATHDIR = $(ROOT)\libtommath
- PKGSDIR = $(ROOT)\pkgs
-+WINDIR = $(ROOT)\win
-
- # Additional include and C macro definitions for the implicit rules
- # defined in rules.vc
-@@ -438,6 +439,7 @@ TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
- !endif
-
-
-+
- #---------------------------------------------------------------------
- # Project specific targets
- # There are 4 primary build configurations to consider from the combination
-@@ -466,18 +468,24 @@ TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
- # release - Everything that builds as part of a release
- #---------------------------------------------------------------------
-
--release: setup $(TCLSH) $(TCLSTUBLIB) dlls pkgs tk-build
--all: setup $(TCLSH) $(TCLSTUBLIB) dlls $(CAT32) pkgs
-+release: setup $(TCLSH) $(TCLSTUBLIB) dlls setpath pkgs tk-build
-+all: setup $(TCLSH) $(TCLSTUBLIB) dlls $(CAT32) setpath pkgs
- core: setup $(TCLLIB) $(TCLSTUBLIB)
- shell: setup $(TCLSH)
- dlls: setup $(TCLREGLIB) $(TCLDDELIB) $(OUT_DIR)\zlib1.dll
- tcltest: setup $(TCLTEST) dlls $(CAT32)
--install: install-binaries install-libraries install-docs install-pkgs tk-build tk-install
-+install: setpath install-binaries install-libraries install-docs install-pkgs tk-build tk-install
- !if $(SYMBOLS)
- install: install-pdbs
- !endif
- setup: default-setup
-
-+# Add TCL win directory to PATH for current session
-+setpath:
-+ @echo Adding $(WINDIR) to PATH
-+ @set PATH=$(WINDIR);$(PATH)
-+ @echo PATH updated for current session
-+
- test: test-core test-pkgs
- test-core: setup $(TCLTEST) dlls $(CAT32)
- set TCL_LIBRARY=$(ROOT:\=/)/library
---
-2.47.1.windows.2
-
+++ /dev/null
-From 34a5ac55260871875c3ad678df8c21ef31500d21 Mon Sep 17 00:00:00 2001
-From: dpasukhi <dpasukhi@opencascade.com>
-Date: Sun, 22 Jun 2025 14:18:19 +0100
-Subject: [PATCH] Add Tk build and install support to Makefile; include
- automatic clean and distclean steps
-
----
- unix/Makefile.in | 69 ++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 69 insertions(+)
-
-diff --git a/unix/Makefile.in b/unix/Makefile.in
-index bc743b3892..7464e3f930 100644
---- a/unix/Makefile.in
-+++ b/unix/Makefile.in
-@@ -95,6 +95,12 @@ TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@
- # Tcl Module default path roots (TIP189).
- TCL_MODULE_PATH = @TCL_MODULE_PATH@
-
-+# Tk-related directories and settings
-+# These can be overridden on the command line or set via environment
-+TKDIR = @TKDIR@
-+TK_BUILD_TOP = $(TKDIR)/unix
-+TK_SRC_DIR = $(TKDIR)
-+
- # warning flags
- CFLAGS_WARNING = @CFLAGS_WARNING@
-
-@@ -623,6 +629,34 @@ SRCS = $(GENERIC_SRCS) $(UNIX_SRCS) $(NOTIFY_SRCS) \
- #--------------------------------------------------------------------------
-
- all: binaries libraries doc packages
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)"; then \
-+ echo "TKDIR detected - automatically building Tk..."; \
-+ echo "========== TK BUILD PARAMETERS =========="; \
-+ echo "TKDIR=$(TKDIR)"; \
-+ echo "TCLDIR=$(TOP_DIR)"; \
-+ echo "prefix=$(prefix)"; \
-+ echo "exec_prefix=$(exec_prefix)"; \
-+ echo "TCL_TCLSH=$(BIN_INSTALL_DIR)/tclsh$(VERSION)${EXE_SUFFIX}"; \
-+ echo "=========================================="; \
-+ if test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "Building Tk using existing Makefile..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE)) || exit $$?; \
-+ elif test -f "$(TK_SRC_DIR)/unix/configure"; then \
-+ echo "Configuring and building Tk..."; \
-+ mkdir -p "$(TK_BUILD_TOP)"; \
-+ (cd "$(TK_BUILD_TOP)" && \
-+ "$(TK_SRC_DIR)/unix/configure" \
-+ --prefix="$(prefix)" \
-+ --exec-prefix="$(exec_prefix)" \
-+ --with-tcl="$(CONFIG_INSTALL_DIR)" && \
-+ $(MAKE)) || exit $$?; \
-+ else \
-+ echo "ERROR: Tk configure script not found at $(TK_SRC_DIR)/unix/configure"; \
-+ exit 1; \
-+ fi; \
-+ else \
-+ echo "TKDIR not set or directory does not exist - skipping Tk build"; \
-+ fi
-
- binaries: ${LIB_FILE} ${TCL_EXE}
-
-@@ -671,11 +705,25 @@ clean: clean-packages
- errors ${TCL_EXE} ${TCLTEST_EXE} lib.exp Tcl @DTRACE_HDR@ \
- minizip${HOST_EXEEXT} *.${HOST_OBJEXT} *.zip *.vfs
- (cd dltest ; $(MAKE) clean)
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)" && test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "TKDIR detected - automatically cleaning Tk..."; \
-+ echo "Cleaning Tk build..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE) clean) || exit $$?; \
-+ else \
-+ echo "TKDIR not set, directory does not exist, or no Tk build to clean"; \
-+ fi
-
- distclean: distclean-packages clean
- rm -rf Makefile config.status config.cache config.log tclConfig.sh \
- tclConfig.h *.plist Tcl.framework tcl.pc tclUuid.h
- (cd dltest ; $(MAKE) distclean)
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)" && test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "TKDIR detected - automatically distcleaning Tk..."; \
-+ echo "Distcleaning Tk build..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE) distclean) || exit $$?; \
-+ else \
-+ echo "TKDIR not set, directory does not exist, or no Tk build to distclean"; \
-+ fi
-
- depend:
- makedepend -- $(DEPEND_SWITCHES) -- $(SRCS)
-@@ -796,6 +844,27 @@ INSTALL_TARGETS = $(INSTALL_BASE_TARGETS) $(INSTALL_DOC_TARGETS) $(INSTALL_DEV_T
- $(INSTALL_PACKAGE_TARGETS) $(INSTALL_EXTRA_TARGETS)
-
- install: $(INSTALL_TARGETS)
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)"; then \
-+ echo "TKDIR detected - automatically installing Tk..."; \
-+ echo "========== TK INSTALL PARAMETERS =========="; \
-+ echo "TKDIR=$(TKDIR)"; \
-+ echo "TCLDIR=$(TOP_DIR)"; \
-+ echo "prefix=$(prefix)"; \
-+ echo "exec_prefix=$(exec_prefix)"; \
-+ echo "DESTDIR=$(INSTALL_ROOT)"; \
-+ echo "TCL_TCLSH=$(BIN_INSTALL_DIR)/tclsh$(VERSION)${EXE_SUFFIX}"; \
-+ echo "==========================================="; \
-+ if test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "Installing Tk..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE) install DESTDIR="$(INSTALL_ROOT)") || exit $$?; \
-+ else \
-+ echo "ERROR: Tk Makefile not found at $(TK_BUILD_TOP)/Makefile"; \
-+ echo "Please run 'make all' first to build Tk"; \
-+ exit 1; \
-+ fi; \
-+ else \
-+ echo "TKDIR not set or directory does not exist - skipping Tk install"; \
-+ fi
-
- install-strip:
- $(MAKE) $(INSTALL_TARGETS) \
---
-2.47.1.windows.2
-
+++ /dev/null
-From bf55f8558b8ca6603f6539c6421391f26ab6139a Mon Sep 17 00:00:00 2001
-From: dpasukhi <dpasukhi@opencascade.com>
-Date: Sun, 22 Jun 2025 15:20:03 +0100
-Subject: [PATCH] Add Tk build and install automation to Makefile; include
- clean and distclean targets
-
----
- win/Makefile.in | 68 +++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 68 insertions(+)
-
-diff --git a/win/Makefile.in b/win/Makefile.in
-index 8dd107670f..f0cf267329 100644
---- a/win/Makefile.in
-+++ b/win/Makefile.in
-@@ -129,6 +129,11 @@ ROOT_DIR_WIN_NATIVE = $(shell cd '$(ROOT_DIR)' ; pwd -W 2>/dev/null || pwd -P)
- ZLIB_DIR_NATIVE = $(shell $(CYGPATH) '$(ZLIB_DIR)')
- TOMMATH_DIR_NATIVE = $(shell $(CYGPATH) '$(TOMMATH_DIR)')
-
-+# Tk-related directories (TKDIR can be set by user)
-+TK_SRC_DIR = $(TKDIR)
-+TK_BUILD_TOP = $(TKDIR)/win
-+CONFIG_INSTALL_DIR = $(LIB_INSTALL_DIR)
-+
- # Fully qualify library path so that `make test`
- # does not depend on the current directory.
- LIBRARY_DIR1 = $(shell cd '$(ROOT_DIR_NATIVE)/library' ; pwd -P)
-@@ -432,6 +437,34 @@ TCL_OBJS = ${GENERIC_OBJS} ${WIN_OBJS} @ZLIB_OBJS@ $(TOMMATH_OBJS)
- TCL_DOCS = "$(ROOT_DIR_NATIVE)"/doc/*.[13n]
-
- all: binaries libraries doc packages
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)"; then \
-+ echo "TKDIR detected - automatically building Tk..."; \
-+ echo "========== TK BUILD PARAMETERS =========="; \
-+ echo "TKDIR=$(TKDIR)"; \
-+ echo "TCLDIR=$(TOP_DIR)"; \
-+ echo "prefix=$(prefix)"; \
-+ echo "exec_prefix=$(exec_prefix)"; \
-+ echo "TCL_TCLSH=$(BIN_INSTALL_DIR)/tclsh$(VER)${EXESUFFIX}"; \
-+ echo "=========================================="; \
-+ if test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "Building Tk using existing Makefile..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE)) || exit $$?; \
-+ elif test -f "$(TK_SRC_DIR)/win/configure"; then \
-+ echo "Configuring and building Tk..."; \
-+ mkdir -p "$(TK_BUILD_TOP)"; \
-+ (cd "$(TK_BUILD_TOP)" && \
-+ "$(TK_SRC_DIR)/win/configure" \
-+ --prefix="$(prefix)" \
-+ --exec-prefix="$(exec_prefix)" \
-+ --with-tcl="$(CONFIG_INSTALL_DIR)" && \
-+ $(MAKE)) || exit $$?; \
-+ else \
-+ echo "ERROR: Tk configure script not found at $(TK_SRC_DIR)/win/configure"; \
-+ exit 1; \
-+ fi; \
-+ else \
-+ echo "TKDIR not set or directory does not exist - skipping Tk build"; \
-+ fi
-
- # Test-suite helper (can be used to test Tcl from build directory with all expected modules).
- # To start from windows shell use:
-@@ -648,6 +681,27 @@ gentommath_h:
- > "$(GENERIC_DIR_NATIVE)/tclTomMath.h"
-
- install: all install-binaries install-libraries install-doc install-packages
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)"; then \
-+ echo "TKDIR detected - automatically installing Tk..."; \
-+ echo "========== TK INSTALL PARAMETERS =========="; \
-+ echo "TKDIR=$(TKDIR)"; \
-+ echo "TCLDIR=$(TOP_DIR)"; \
-+ echo "prefix=$(prefix)"; \
-+ echo "exec_prefix=$(exec_prefix)"; \
-+ echo "DESTDIR=$(INSTALL_ROOT)"; \
-+ echo "TCL_TCLSH=$(BIN_INSTALL_DIR)/tclsh$(VER)${EXESUFFIX}"; \
-+ echo "==========================================="; \
-+ if test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "Installing Tk..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE) install DESTDIR="$(INSTALL_ROOT)") || exit $$?; \
-+ else \
-+ echo "ERROR: Tk Makefile not found at $(TK_BUILD_TOP)/Makefile"; \
-+ echo "Please run 'make all' first to build Tk"; \
-+ exit 1; \
-+ fi; \
-+ else \
-+ echo "TKDIR not set or directory does not exist - skipping Tk install"; \
-+ fi
-
- install-binaries: binaries
- @for i in "$(LIB_INSTALL_DIR)" "$(BIN_INSTALL_DIR)"; \
-@@ -848,10 +902,24 @@ clean: cleanhelp clean-packages
- $(RM) $(TCLSH) $(CAT32) $(TEST_EXE_FILE) $(TEST_DLL_FILE) tcltest.cmd tcltest.sh
- $(RM) *.pch *.ilk *.pdb *.zip
- $(RMDIR) *.vfs
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)" && test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "TKDIR detected - automatically cleaning Tk..."; \
-+ echo "Cleaning Tk build..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE) clean) || exit $$?; \
-+ else \
-+ echo "TKDIR not set, directory does not exist, or no Tk build to clean"; \
-+ fi
-
- distclean: distclean-packages clean
- $(RM) Makefile config.status config.cache config.log tclConfig.sh \
- tcl.hpj config.status.lineno tclsh.exe.manifest tclUuid.h
-+ @if test -n "$(TKDIR)" && test -d "$(TKDIR)" && test -f "$(TK_BUILD_TOP)/Makefile"; then \
-+ echo "TKDIR detected - automatically distcleaning Tk..."; \
-+ echo "Distcleaning Tk build..."; \
-+ (cd "$(TK_BUILD_TOP)" && $(MAKE) distclean) || exit $$?; \
-+ else \
-+ echo "TKDIR not set, directory does not exist, or no Tk build to distclean"; \
-+ fi
-
- #
- # Bundled package targets
---
-2.47.1.windows.2
-
+++ /dev/null
-From 85842ba83b70d99f90ee3fff8c956e82d17759f2 Mon Sep 17 00:00:00 2001
-From: Marek Roszko <mark.roszko@gmail.com>
-Date: Tue, 18 Aug 2020 23:11:27 -0400
-Subject: [PATCH] Remove broken exist check for shell install
-
----
- win/makefile.vc | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/win/makefile.vc b/win/makefile.vc
-index f5d2f4a..6bffe32 100644
---- a/win/makefile.vc
-+++ b/win/makefile.vc
-@@ -869,10 +869,8 @@ install-binaries:
- @$(CPY) "$(TCLLIB)" "$(BIN_INSTALL_DIR)\"
- !endif
- @$(CPY) "$(TCLIMPLIB)" "$(LIB_INSTALL_DIR)\"
--!if exist($(TCLSH))
- @echo Installing $(TCLSHNAME)
- @$(CPY) "$(TCLSH)" "$(BIN_INSTALL_DIR)\"
--!endif
- @echo Installing $(TCLSTUBLIBNAME)
- @$(CPY) "$(TCLSTUBLIB)" "$(LIB_INSTALL_DIR)\"
-
---
-2.28.0.windows.1
-
FILENAME tcl8.6.16-src.tar.gz
SHA512 434c92f8181fb8dca6bc065b0f1f5078779086f19adf008818c90a3108596c63465ef43e9f3c1cfb3d4151a9de244d0bf0e6ee5b40e714b1ddca4a78eb43050b
PATCHES
- 0001-Add-tk-build.patch
- 0002-Add-setpath-target.patch
- 0003-Update-unix-build.patch
- 0004-Update-mingw-build.patch
+ 0001-Support-Tk.patch
)
set(USE_TCL_TK OFF)
+set (TKDIR_WIN "")
if ("tk" IN_LIST FEATURES)
+ set (TKDIR_WIN "TKDIR=../extra/tk.8.6.16-src")
vcpkg_from_sourceforge(
OUT_SOURCE_PATH TK_SOURCE_PATH
REPO tcl/Tcl
${TCL_BUILD_ARCH_STR}
${TCL_BUILD_STATS}
${TCL_BUILD_CHECKS}
- TKDIR=../extra/tk.8.6.16-src
+ ${TKDIR_WIN}
OPTIONS_DEBUG
${TCL_BUILD_OPTS},symbols,pdbs
INSTALLDIR=${CURRENT_PACKAGES_DIR}/debug
if (VCPKG_TARGET_IS_MINGW)
set (TCL_PROJECT_SUBPATH win)
endif()
- file(REMOVE "${SOURCE_PATH}/${TCL_PROJECT_SUBPATH}/configure")
+ # file(REMOVE "${SOURCE_PATH}/${TCL_PROJECT_SUBPATH}/configure")
# For MinGW and other Unix-like environments on Windows, use unix build path
# MinGW can use either win/ (with MinGW-compatible Makefiles) or unix/ (with autotools)
vcpkg_configure_make(
SOURCE_PATH "${SOURCE_PATH}"
PROJECT_SUBPATH ${TCL_PROJECT_SUBPATH}
- OPTIONS
- TKDIR=${SOURCE_PATH}/extra/tk.8.6.16-src
+ AUTOCONFIG
)
- vcpkg_install_make(
- OPTIONS
- TKDIR=${SOURCE_PATH}/extra/tk.8.6.16-src
- )
+ # Build with explicit X11 paths for Tk when needed
+ if(USE_TCL_TK AND NOT VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_build_make(
+ ENVIRONMENT
+ "CPPFLAGS=-I${CURRENT_INSTALLED_DIR}/include"
+ "LDFLAGS=-L${CURRENT_INSTALLED_DIR}/lib"
+ )
+ vcpkg_install_make(
+ ENVIRONMENT
+ "CPPFLAGS=-I${CURRENT_INSTALLED_DIR}/include"
+ "LDFLAGS=-L${CURRENT_INSTALLED_DIR}/lib"
+ )
+ else()
+ vcpkg_install_make()
+ endif()
vcpkg_fixup_pkgconfig()
--- /dev/null
+set(VCPKG_TARGET_ARCHITECTURE x64)
+set(VCPKG_CRT_LINKAGE dynamic)
+set(VCPKG_LIBRARY_LINKAGE dynamic)
+
+set(VCPKG_CMAKE_SYSTEM_NAME Linux)
+
+set(VCPKG_FIXUP_ELF_RPATH ON)
+
+set(VCPKG_BUILD_TYPE "release")
],
"overlay-ports": [
"./ports"
- ]
-}
+ ],
+ "overlay-triplets": [
+ "./triplets"
+ ]
+}
\ No newline at end of file
],
"features": {
"angle": {
- "description": "Enables optional usage of ANGLE. Part of the module-visualization.",
+ "description": "Enables optional usage of OpenGL ES 2.0. Part of the module-visualization.",
"dependencies": [
- "angle"
+ {
+ "name": "angle",
+ "platform": "!(linux & !static)"
+ }
]
},
"opengl": {
"features": [
"tk"
]
+ },
+ {
+ "name": "libx11",
+ "platform": "!windows"
}
]
},