mirror of https://github.com/GNOME/gimp.git
build/windows: Port building scripts to use Windows native shell
From now, Windows contributors can use the default shell provided by the OS (which is PS since Windows build 10.0.14971.0), like Linux and macOS users do. We still use MSYS2 but not the POSIX shell. This change adds these features: '1_build-deps-msys2.sh' is now '1_build-deps-msys2.ps1' - Faster clonning by using 'git-scm' (the MSYS2 one had performance problems) - Easier to use non-MSYS2 binaries, not only 'git-scm' but also official meson, deps from vckpg etc. This is a needed step towards the future use of MSVC. '2_build-gimp-msys2.sh' is now '2_build-gimp-msys2.ps1' - By default, vanilla builds (normally triggered on PS) will create a bundle, dropping the need of 'gimp.cmd' (that adressed .typelib and .interp limits), which is inline with other (Cmake-based) projects like Darktable and Inkscape. This change is important because even Windows devs more experienced than me get confused with the relocatibility stuff, which is the default on Windows. '2_bundle-gimp-uni_base.sh' - As a result of the change above, bundling code was changed to be a bit faster. It still is, however, painfully slow, since meson doesn't have a 'install()' function like Cmake to prepend targets in Ninja's 'install_manifest.txt'. Since we are not using a POSIX shell (nor 'mintty') anymore: - GIMP can be built from every path easily with R. Click "Open Terminal", with IDE integrations etc, without needing to manual tweak MSYS2 .ini files etc. We could tweak MSYS2 to get the features above but not top-tier integration. - Developers can be more aware of Windows native vars, paths etc, and avoid bugs Some build files were improved to support the 'Windows way of doing things'. - No need to close and reopen terminal anymore after running 'pacman -Suy'! --- REGRESSION: Vala plug-ins are temporarely gone due to 'vapigen' bugs, a small regression since this is a gnomeish language but I will investigate how to fix.
This commit is contained in:
parent
a01dc47983
commit
9ab481647c
|
@ -415,7 +415,7 @@ gimp-win-x64-cross:
|
|||
paths:
|
||||
- gimp-x64/
|
||||
- _build-cross/meson-logs/meson-log.txt
|
||||
- done-dll.list
|
||||
- _build-cross/done-dll.list
|
||||
expire_in: 2 days
|
||||
|
||||
## WINDOWS pipelines (native MSYS2) ##
|
||||
|
@ -448,10 +448,18 @@ gimp-win-x64-cross:
|
|||
variables:
|
||||
STORE_OPTION: '-Dms-store=true'
|
||||
- <<: *CI_RELEASE
|
||||
variables:
|
||||
CHERE_INVOKING: "yes"
|
||||
# We use the same universal variables but not directly from PS
|
||||
before_script: []
|
||||
# We don't use the universal variables since we use PS
|
||||
before_script:
|
||||
# MSYS2 config
|
||||
- $MSYS2_PREFIX = 'C:/msys64'
|
||||
- $env:Path = "$MSYS2_PREFIX/$MSYSTEM_PREFIX/bin;$MSYS2_PREFIX/usr/bin;" + $env:Path
|
||||
# Build-time vars
|
||||
# FIXME:'gimpenv' have buggy code about Windows paths
|
||||
- $GIMP_PREFIX = "$PWD\_install".Replace('\', '/')
|
||||
- $env:Path = $env:Path + ";$GIMP_PREFIX/bin"
|
||||
- $env:PKG_CONFIG_PATH = "$MSYS2_PREFIX/$MSYSTEM_PREFIX/lib/pkgconfig;$MSYS2_PREFIX/$MSYSTEM_PREFIX/share/pkgconfig;$GIMP_PREFIX/lib/pkgconfig"
|
||||
- $env:XDG_DATA_DIRS = "$MSYS2_PREFIX/$MSYSTEM_PREFIX/share;$GIMP_PREFIX/share"
|
||||
- $env:GI_TYPELIB_PATH = "$MSYS2_PREFIX/$MSYSTEM_PREFIX/lib/girepository-1.0;$GIMP_PREFIX/lib/girepository-1.0"
|
||||
|
||||
## WINDOWS Aarch64 CI (native MSYS2) ##
|
||||
.win-a64:
|
||||
|
@ -462,15 +470,7 @@ gimp-win-x64-cross:
|
|||
tags:
|
||||
- windows-aarch64
|
||||
variables:
|
||||
MSYSTEM: "CLANGARM64"
|
||||
before_script:
|
||||
# Verification to prevent the job from failing because stuck pacman (ARM only)
|
||||
- $stuck = Test-Path -Path "C:\msys64\var\lib\pacman\db.lck" -PathType Leaf
|
||||
- if ($stuck -eq "True") {
|
||||
Remove-Item -Force -Path "C:\msys64\var\lib\pacman\db.lck";
|
||||
Write-Output "Cleaned previous stuck pacman" }
|
||||
- taskkill /F /FI "MODULES eq msys-2.0.dll"
|
||||
- Start-Job -ScriptBlock{sleep 90; taskkill /t /F /IM "pacman.exe"}
|
||||
MSYSTEM_PREFIX: clangarm64
|
||||
|
||||
deps-win-a64:
|
||||
extends: .win-a64
|
||||
|
@ -479,7 +479,7 @@ deps-win-a64:
|
|||
needs: []
|
||||
stage: dependencies
|
||||
script:
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/1_build-deps-msys2.sh"
|
||||
- build/windows/1_build-deps-msys2.ps1
|
||||
artifacts:
|
||||
paths:
|
||||
- _install/
|
||||
|
@ -494,12 +494,12 @@ gimp-win-a64:
|
|||
needs: ["deps-win-a64"]
|
||||
stage: gimp
|
||||
script:
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/2_build-gimp-msys2.sh"
|
||||
- build/windows/2_build-gimp-msys2.ps1
|
||||
artifacts:
|
||||
paths:
|
||||
- gimp-a64/
|
||||
- _build/meson-logs/meson-log.txt
|
||||
- done-dll.list
|
||||
- _build/done-dll.list
|
||||
# Needed by dist-installer-weekly and dist-store-weekly
|
||||
- _build/config.h
|
||||
- _build/build/windows/installer/
|
||||
|
@ -516,7 +516,7 @@ gimp-win-a64:
|
|||
tags:
|
||||
- win32-ps
|
||||
variables:
|
||||
MSYSTEM: "CLANG64"
|
||||
MSYSTEM_PREFIX: clang64
|
||||
|
||||
deps-win-x64:
|
||||
extends: .win-x64
|
||||
|
@ -525,7 +525,7 @@ deps-win-x64:
|
|||
needs: []
|
||||
stage: dependencies
|
||||
script:
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/1_build-deps-msys2.sh"
|
||||
- build/windows/1_build-deps-msys2.ps1
|
||||
artifacts:
|
||||
paths:
|
||||
- _install/
|
||||
|
@ -538,11 +538,11 @@ gimp-win-x64:
|
|||
needs: ["deps-win-x64"]
|
||||
stage: gimp
|
||||
script:
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/2_build-gimp-msys2.sh"
|
||||
- build/windows/2_build-gimp-msys2.ps1
|
||||
artifacts:
|
||||
paths:
|
||||
- gimp-x64/
|
||||
- done-dll.list
|
||||
- _build/done-dll.list
|
||||
expire_in: 2 days
|
||||
|
||||
## WINDOWS x86 CI (native MSYS2) ##
|
||||
|
@ -555,9 +555,10 @@ gimp-win-x64:
|
|||
tags:
|
||||
- win32-ps
|
||||
variables:
|
||||
MSYSTEM: "MINGW32"
|
||||
CC: "ccache cc"
|
||||
CXX: "ccache c++"
|
||||
MSYSTEM_PREFIX: mingw32
|
||||
MINGW_PACKAGE_PREFIX: mingw-w64-i686
|
||||
CC: cc
|
||||
CXX: c++
|
||||
CC_LD: bfd
|
||||
CXX_LD: bfd
|
||||
|
||||
|
@ -568,7 +569,7 @@ deps-win-x86:
|
|||
needs: []
|
||||
stage: dependencies
|
||||
script:
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/1_build-deps-msys2.sh"
|
||||
- build/windows/1_build-deps-msys2.ps1
|
||||
artifacts:
|
||||
paths:
|
||||
- _install/
|
||||
|
@ -581,13 +582,13 @@ gimp-win-x86:
|
|||
needs: ["deps-win-x86"]
|
||||
stage: gimp
|
||||
script:
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/2_build-gimp-msys2.sh"
|
||||
- build/windows/2_build-gimp-msys2.ps1
|
||||
# We split 32-bit DWARF symbols here because LLVM-objcopy do NOT support them
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/installer/3_dist-gimp-inno_sym.sh"
|
||||
- bash build/windows/installer/3_dist-gimp-inno_sym.sh
|
||||
artifacts:
|
||||
paths:
|
||||
- gimp-x86/
|
||||
- done-dll.list
|
||||
- _build/done-dll.list
|
||||
expire_in: 2 days
|
||||
|
||||
|
||||
|
@ -783,11 +784,8 @@ dist-installer-weekly:
|
|||
stage: distribution
|
||||
tags:
|
||||
- windows-aarch64
|
||||
variables:
|
||||
MSYSTEM: "CLANGARM64"
|
||||
cache: []
|
||||
script:
|
||||
- C:\msys64\usr\bin\bash -lc "bash build/windows/installer/3_dist-gimp-inno_sym.sh"
|
||||
- build/windows/installer/3_dist-gimp-inno.ps1
|
||||
artifacts:
|
||||
expose_as: 'Windows exe'
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
#!/usr/bin/env pwsh
|
||||
|
||||
if (-not $GITLAB_CI)
|
||||
{
|
||||
# Make the script work locally
|
||||
if (-not (Test-Path build\windows) -and -not (Test-Path 1_build-deps-msys2.ps1 -Type Leaf) -or $PSScriptRoot -notlike "*build\windows*")
|
||||
{
|
||||
Write-Host '(ERROR): Script called from wrong dir. Please, read: https://developer.gimp.org/core/setup/build/windows/' -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
elseif (Test-Path 1_build-deps-msys2.ps1 -Type Leaf)
|
||||
{
|
||||
Set-Location ..\..
|
||||
}
|
||||
|
||||
$GIT_DEPTH = '1'
|
||||
}
|
||||
|
||||
|
||||
# Install the required (pre-built) packages for babl, GEGL and GIMP
|
||||
#https://github.com/msys2/msys2-installer/issues/85
|
||||
$MSYS2_PREFIX = 'C:/msys64'
|
||||
if ($MSYSTEM_PREFIX -eq 'mingw32')
|
||||
{
|
||||
Write-Host '(WARNING): 32-bit builds will be dropped in a future release. See: https://gitlab.gnome.org/GNOME/gimp/-/issues/10922' -ForegroundColor Yellow
|
||||
}
|
||||
elseif ((Get-WmiObject -Class Win32_ComputerSystem).SystemType -like 'ARM64*')
|
||||
{
|
||||
$MSYSTEM_PREFIX = 'clangarm64'
|
||||
$MINGW_PACKAGE_PREFIX = 'mingw-w64-clang-aarch64'
|
||||
}
|
||||
elseif ((Get-WmiObject -Class Win32_ComputerSystem).SystemType -like 'x64*')
|
||||
{
|
||||
$MSYSTEM_PREFIX = 'clang64'
|
||||
$MINGW_PACKAGE_PREFIX = 'mingw-w64-clang-x86_64'
|
||||
}
|
||||
$env:Path = "$MSYS2_PREFIX/$MSYSTEM_PREFIX/bin;$MSYS2_PREFIX/usr/bin;" + $env:Path
|
||||
|
||||
#https://github.com/msys2/MSYS2-packages/issues/4340
|
||||
$PACMAN_CONF = "$MSYS2_PREFIX\etc\pacman.conf"
|
||||
Copy-Item $PACMAN_CONF "$PACMAN_CONF.bak"
|
||||
(Get-Content $PACMAN_CONF) | Foreach-Object {$_ -replace "SigLevel = Required","SigLevel = DatabaseNever"} |
|
||||
Set-Content $PACMAN_CONF
|
||||
pacman --noconfirm -Suy
|
||||
pacman --noconfirm -S --needed base-devel $MINGW_PACKAGE_PREFIX-toolchain (Get-Content build/windows/all-deps-uni.txt).Replace('${MINGW_PACKAGE_PREFIX}',$MINGW_PACKAGE_PREFIX).Replace(' \','')
|
||||
Remove-Item $PACMAN_CONF
|
||||
Rename-Item "$PACMAN_CONF.bak" $PACMAN_CONF
|
||||
|
||||
|
||||
# Prepare env
|
||||
$GIMP_DIR = $PWD
|
||||
|
||||
if (-not $GITLAB_CI)
|
||||
{
|
||||
Set-Location ..
|
||||
|
||||
if (-not $GIMP_PREFIX)
|
||||
{
|
||||
$GIMP_PREFIX = "$PWD\_install"
|
||||
}
|
||||
|
||||
Invoke-Expression ((Get-Content $GIMP_DIR\.gitlab-ci.yml | Select-String 'env:Path \+' -Context 0,3) -replace '> ','' -replace '- ','')
|
||||
}
|
||||
|
||||
|
||||
# Build babl and GEGL
|
||||
function self_build ([string]$dep, [string]$option1, [string]$option2)
|
||||
{
|
||||
## Make sure that the deps repos are fine
|
||||
if (-not (Test-Path $dep))
|
||||
{
|
||||
$repo="https://gitlab.gnome.org/GNOME/$dep.git"
|
||||
|
||||
# For tagged jobs (i.e. release or test jobs for upcoming releases), use the
|
||||
# last tag. Otherwise use the default branch's HEAD.
|
||||
if ($CI_COMMIT_TAG)
|
||||
{
|
||||
$tag = (git ls-remote --exit-code --refs --sort=version:refname $repo refs/tags/GIMP_[0-9]*_* | Select-Object -Last 1).Split('refs/')[-1]
|
||||
$git_options="--branch=$tag"
|
||||
Write-Output "Using tagged release of ${dep}: $tag"
|
||||
}
|
||||
|
||||
git clone $git_options --depth $GIT_DEPTH $repo
|
||||
}
|
||||
Set-Location $dep
|
||||
git pull
|
||||
|
||||
## Configure and/or build
|
||||
if (-not (Test-Path _build\build.ninja -Type Leaf))
|
||||
{
|
||||
meson setup _build -Dprefix="$GIMP_PREFIX" $option1 $option2
|
||||
}
|
||||
Set-Location _build
|
||||
ninja
|
||||
ninja install
|
||||
ccache --show-stats
|
||||
Set-Location ../..
|
||||
}
|
||||
|
||||
#https://gitlab.gnome.org/GNOME/babl/-/issues/97
|
||||
self_build babl '-Dwith-docs=false' '-Denable-vapi=false'
|
||||
self_build gegl '-Dworkshop=true' '-Dvapigen=disabled'
|
||||
|
||||
Set-Location $GIMP_DIR
|
|
@ -1,108 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ -z "$GITLAB_CI" ]; then
|
||||
# Make the script work locally
|
||||
if [ "$0" != 'build/windows/1_build-deps-msys2.sh' ] && [ ${PWD/*\//} != 'windows' ]; then
|
||||
echo -e '\033[31m(ERROR)\033[0m: Script called from wrong dir. Please, read: https://developer.gimp.org/core/setup/build/windows/'
|
||||
exit 1
|
||||
elif [ ${PWD/*\//} = 'windows' ]; then
|
||||
cd ../..
|
||||
fi
|
||||
export GIT_DEPTH=1
|
||||
GIMP_DIR=$(echo "${PWD##*/}/")
|
||||
cd $(dirname $PWD)
|
||||
fi
|
||||
|
||||
if [ "$MSYSTEM_CARCH" = "i686" ]; then
|
||||
echo -e "\033[33m(WARNING)\033[0m: 32-bit builds will be dropped in a future release. See: https://gitlab.gnome.org/GNOME/gimp/-/issues/10922"
|
||||
fi
|
||||
|
||||
|
||||
# Install the required (pre-built) packages for babl, GEGL and GIMP
|
||||
if [ "$MSYSTEM_CARCH" != "aarch64" ]; then
|
||||
# https://gitlab.gnome.org/GNOME/gimp/-/issues/10782
|
||||
pacman --noconfirm -Suy
|
||||
fi
|
||||
# Beginning of install code block
|
||||
DEPS_LIST=$(cat ${GIMP_DIR}build/windows/all-deps-uni.txt |
|
||||
sed "s/\${MINGW_PACKAGE_PREFIX}-/${MINGW_PACKAGE_PREFIX}-/g" |
|
||||
sed 's/\\//g')
|
||||
|
||||
if [ "$MSYSTEM_CARCH" = "aarch64" ]; then
|
||||
retry=3
|
||||
while [ $retry -gt 0 ]; do
|
||||
timeout --signal=KILL 3m pacman --noconfirm -S --needed git \
|
||||
base-devel \
|
||||
${MINGW_PACKAGE_PREFIX}-toolchain \
|
||||
$DEPS_LIST && break
|
||||
echo "MSYS2 pacman timed out. Trying again."
|
||||
taskkill //t //F //IM "pacman.exe"
|
||||
rm -f c:/msys64/var/lib/pacman/db.lck
|
||||
: $((--retry))
|
||||
done
|
||||
|
||||
if [ $retry -eq 0 ]; then
|
||||
echo "MSYS2 pacman repeatedly failed. See: https://github.com/msys2/MSYS2-packages/issues/4340"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
pacman --noconfirm -S --needed git \
|
||||
base-devel \
|
||||
${MINGW_PACKAGE_PREFIX}-toolchain \
|
||||
$DEPS_LIST
|
||||
fi
|
||||
# End of install code block
|
||||
|
||||
|
||||
# Prepare env
|
||||
## We need to create the condition this ugly way to not break CI
|
||||
if [ "$GITLAB_CI" ]; then
|
||||
export GIMP_PREFIX="$PWD/_install"
|
||||
elif [ -z "$GITLAB_CI" ] && [ -z "$GIMP_PREFIX" ]; then
|
||||
export GIMP_PREFIX="$PWD/_install"
|
||||
fi
|
||||
## Universal variables from .gitlab-ci.yml
|
||||
IFS=$'\n' VAR_ARRAY=($(cat ${GIMP_DIR}.gitlab-ci.yml | sed -n '/export PATH=/,/GI_TYPELIB_PATH}\"/p' | sed 's/ - //'))
|
||||
IFS=$' \t\n'
|
||||
for VAR in "${VAR_ARRAY[@]}"; do
|
||||
eval "$VAR" || continue
|
||||
done
|
||||
|
||||
|
||||
# Build babl and GEGL
|
||||
self_build ()
|
||||
{
|
||||
# Clone source only if not already cloned or downloaded
|
||||
repo="https://gitlab.gnome.org/GNOME/$1.git"
|
||||
|
||||
if [ "$CI_COMMIT_TAG" != "" ]; then
|
||||
# For tagged jobs (i.e. release or test jobs for upcoming releases), use the
|
||||
# last tag. Otherwise use the default branch's HEAD.
|
||||
tag=$(git ls-remote --tags --exit-code --refs "$repo" | grep -oi "${1}_[0-9]*_[0-9]*_[0-9]*" | sort --version-sort | tail -1)
|
||||
git_options="--branch=$tag"
|
||||
echo "Using tagged release of $1: $tag"
|
||||
fi
|
||||
|
||||
if [ ! -d "$1" ]; then
|
||||
git clone $git_options --depth $GIT_DEPTH $repo || exit 1
|
||||
else
|
||||
cd $1 && git pull && cd ..
|
||||
fi
|
||||
|
||||
# Build
|
||||
if [ ! -f "$1/_build/build.ninja" ]; then
|
||||
mkdir -p $1/_build && cd $1/_build
|
||||
meson setup .. -Dprefix="$GIMP_PREFIX" $2
|
||||
else
|
||||
cd $1/_build
|
||||
fi
|
||||
ninja
|
||||
ninja install
|
||||
ccache --show-stats
|
||||
cd ../..
|
||||
}
|
||||
|
||||
self_build babl '-Dwith-docs=false'
|
||||
self_build gegl '-Dworkshop=true'
|
|
@ -75,24 +75,4 @@ ninja
|
|||
ninja install
|
||||
ccache --show-stats
|
||||
cd ..
|
||||
|
||||
## Wrapper just for easier GIMP running (to not look at the huge bin/ folder with many .DLLs)
|
||||
GIMP_APP_VERSION=$(grep GIMP_APP_VERSION _build$ARTIFACTS_SUFFIX/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/')
|
||||
echo "@echo off
|
||||
echo This is a CI crossbuild of GIMP.
|
||||
echo .js (JavaScript) plug-ins ^|^ NOT supported!
|
||||
echo .py (Python) plug-ins ^|^ NOT supported!
|
||||
echo .scm (ScriptFu) plug-ins ^|^ NOT supported!
|
||||
echo .vala (Vala) plug-ins ^|^ NOT supported!
|
||||
echo.
|
||||
bin\gimp-$GIMP_APP_VERSION.exe" > ${CROSSROAD_PREFIX}/gimp.cmd
|
||||
|
||||
if [ "$GITLAB_CI" ]; then
|
||||
# Copy GIMP and all its deps to improvised GIMP_PREFIX
|
||||
cp -fr $CROSSROAD_PREFIX/ _install$ARTIFACTS_SUFFIX
|
||||
|
||||
# Bundle GIMP
|
||||
bash build/windows/2_bundle-gimp-uni_base.sh --authorized
|
||||
fi
|
||||
|
||||
fi # END OF CROSSROAD ENV
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env pwsh
|
||||
|
||||
if (-not $GITLAB_CI)
|
||||
{
|
||||
# Make the script work locally
|
||||
if (-not (Test-Path build\windows) -and -not (Test-Path 2_build-gimp-msys2.ps1 -Type Leaf) -or $PSScriptRoot -notlike "*build\windows*")
|
||||
{
|
||||
Write-Host '(ERROR): Script called from wrong dir. Please, read: https://developer.gimp.org/core/setup/build/windows/' -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
elseif (Test-Path 2_build-gimp-msys2.ps1 -Type Leaf)
|
||||
{
|
||||
Set-Location ..\..
|
||||
}
|
||||
|
||||
git submodule update --init
|
||||
}
|
||||
|
||||
|
||||
# Install the required (pre-built) packages for babl, GEGL and GIMP (again)
|
||||
Invoke-Expression ((Get-Content build\windows\1_build-deps-msys2.ps1 | Select-String 'MSYS2_PREFIX =' -Context 0,17) -replace '> ','')
|
||||
|
||||
if ($GITLAB_CI)
|
||||
{
|
||||
Invoke-Expression ((Get-Content build\windows\1_build-deps-msys2.ps1 | Select-String 'PACMAN_CONF =' -Context 0,7) -replace '> ','')
|
||||
}
|
||||
|
||||
|
||||
# Prepare env
|
||||
if (-not $GITLAB_CI)
|
||||
{
|
||||
if (-not $GIMP_PREFIX)
|
||||
{
|
||||
#FIXME:'gimpenv' have buggy code about Windows paths
|
||||
$GIMP_PREFIX = "$PWD\..\_install".Replace('\', '/')
|
||||
}
|
||||
|
||||
Invoke-Expression ((Get-Content .gitlab-ci.yml | Select-String 'env:Path \+' -Context 0,3) -replace '> ','' -replace '- ','')
|
||||
}
|
||||
|
||||
|
||||
# Build GIMP
|
||||
if (-not (Test-Path _build\build.ninja -Type Leaf))
|
||||
{
|
||||
#https://gitlab.gnome.org/GNOME/gimp/-/issues/11200
|
||||
#https://gitlab.gnome.org/GNOME/gimp/-/issues/5891
|
||||
meson setup _build -Dprefix="$GIMP_PREFIX" -Dgi-docgen=disabled -Djavascript=disabled -Dvala=disabled `
|
||||
-Ddirectx-sdk-dir="$MSYS2_PREFIX/$MSYSTEM_PREFIX" -Denable-default-bin=enabled `
|
||||
-Dbuild-id='org.gimp.GIMP_official' $INSTALLER_OPTION $STORE_OPTION
|
||||
}
|
||||
Set-Location _build
|
||||
ninja
|
||||
ninja install
|
||||
ccache --show-stats
|
||||
Set-Location ..
|
|
@ -1,138 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ -z "$GITLAB_CI" ]; then
|
||||
# Make the script work locally
|
||||
if [ "$0" != 'build/windows/2_build-gimp-msys2.sh' ] && [ ${PWD/*\//} != 'windows' ]; then
|
||||
echo -e '\033[31m(ERROR)\033[0m: Script called from wrong dir. Please, read: https://developer.gimp.org/core/setup/build/windows/'
|
||||
exit 1
|
||||
elif [ ${PWD/*\//} = 'windows' ]; then
|
||||
cd ../..
|
||||
fi
|
||||
git submodule update --init --force
|
||||
fi
|
||||
|
||||
if [ "$MSYSTEM_CARCH" = "i686" ]; then
|
||||
echo -e "\033[33m(WARNING)\033[0m: 32-bit builds will be dropped in a future release. See: https://gitlab.gnome.org/GNOME/gimp/-/issues/10922"
|
||||
fi
|
||||
|
||||
|
||||
if [ "$GITLAB_CI" ]; then
|
||||
# Install the required (pre-built) packages for GIMP again
|
||||
# We take code from deps script to better maintenance
|
||||
echo "$(cat build/windows/1_build-deps-msys2.sh |
|
||||
sed -n '/# Beginning of install/,/# End of install/p')" | bash
|
||||
fi
|
||||
|
||||
|
||||
# Prepare env
|
||||
## We need to create the condition this ugly way to not break CI
|
||||
if [ "$GITLAB_CI" ]; then
|
||||
export GIMP_PREFIX="$PWD/_install"
|
||||
elif [ -z "$GITLAB_CI" ] && [ -z "$GIMP_PREFIX" ]; then
|
||||
export GIMP_PREFIX="$PWD/../_install"
|
||||
fi
|
||||
## Universal variables from .gitlab-ci.yml
|
||||
IFS=$'\n' VAR_ARRAY=($(cat .gitlab-ci.yml | sed -n '/export PATH=/,/GI_TYPELIB_PATH}\"/p' | sed 's/ - //'))
|
||||
IFS=$' \t\n'
|
||||
for VAR in "${VAR_ARRAY[@]}"; do
|
||||
eval "$VAR" || continue
|
||||
done
|
||||
|
||||
|
||||
# Build GIMP
|
||||
if [ -z "$GITLAB_CI" ] && [ "$1" != "--relocatable" ]; then
|
||||
echo "(INFO): GIMP will be built in MSYS2 friendly mode"
|
||||
export bundle_option='-Drelocatable-bundle=no'
|
||||
elif [ "$GITLAB_CI" ] || [ "$1" = '--relocatable' ]; then
|
||||
echo "(INFO): GIMP will be built as a relocatable bundle"
|
||||
export bundle_option='-Drelocatable-bundle=yes'
|
||||
fi
|
||||
if [ -z "$GITLAB_CI" ] && [ "$1" = '--relocatable' ]; then
|
||||
export INSTALLER_OPTION='-Dwindows-installer=true'
|
||||
export STORE_OPTION='-Dms-store=true'
|
||||
fi
|
||||
export MESON_OPTIONS="$bundle_option $INSTALLER_OPTION $STORE_OPTION"
|
||||
|
||||
if [ ! -f "_build/build.ninja" ]; then
|
||||
mkdir -p "_build" && cd "_build"
|
||||
echo "$1" > last_mode
|
||||
# We disable javascript as we are not able for the time being to add a
|
||||
# javascript interpreter with GObject Introspection (GJS/spidermonkey
|
||||
# and Seed/Webkit are the 2 contenders so far, but they are not
|
||||
# available on MSYS2 and we are told it's very hard to build them).
|
||||
# TODO: re-enable javascript plug-ins when we can figure this out.
|
||||
meson setup .. -Dprefix="${GIMP_PREFIX}" \
|
||||
-Dgi-docgen=disabled \
|
||||
-Djavascript=disabled \
|
||||
-Ddirectx-sdk-dir="${MSYSTEM_PREFIX}" \
|
||||
-Denable-default-bin=enabled \
|
||||
-Dbuild-id=org.gimp.GIMP_official $MESON_OPTIONS
|
||||
else
|
||||
cd "_build"
|
||||
if [[ $(head -1 last_mode) != "$1" ]]; then
|
||||
echo "$1" > last_mode
|
||||
meson setup .. --reconfigure $MESON_OPTIONS
|
||||
fi
|
||||
fi
|
||||
ninja
|
||||
ninja install
|
||||
ccache --show-stats
|
||||
cd ..
|
||||
|
||||
|
||||
# Wrapper just for easier GIMP running
|
||||
make_cmd ()
|
||||
{
|
||||
if [ "$4" == "do_wizardry" ]; then
|
||||
interp_pyt="(
|
||||
echo python=$2\bin\python.exe
|
||||
echo python3=$2\bin\python.exe
|
||||
echo /usr/bin/python=$2\bin\python.exe
|
||||
echo /usr/bin/python3=$2\bin\python.exe
|
||||
echo :Python:E::py::python:
|
||||
) >%cd%\lib\gimp\GIMP_API_VERSION\interpreters\pygimp.interp"
|
||||
interp_scm="(
|
||||
echo gimp-script-fu-interpreter=%cd%\bin\gimp-script-fu-interpreter-GIMP_API_VERSION.exe
|
||||
echo gimp-script-fu-interpreter-GIMP_API_VERSION=%cd%\bin\gimp-script-fu-interpreter-GIMP_API_VERSION.exe
|
||||
echo /usr/bin/gimp-script-fu-interpreter=%cd%\bin\gimp-script-fu-interpreter-GIMP_API_VERSION.exe
|
||||
echo :ScriptFu:E::scm::gimp-script-fu-interpreter-GIMP_API_VERSION.exe:
|
||||
) >%cd%\lib\gimp\GIMP_API_VERSION\interpreters\gimp-script-fu-interpreter.interp"
|
||||
cp_typelib="@if not exist MSYS2_PREFIX\lib\girepository-1.0\babl*.typelib (copy lib\girepository-1.0\babl*.typelib $2\lib\girepository-1.0) > nul
|
||||
@if not exist MSYS2_PREFIX\lib\girepository-1.0\gegl*.typelib (copy lib\girepository-1.0\gegl*.typelib $2\lib\girepository-1.0) > nul
|
||||
@if not exist MSYS2_PREFIX\lib\girepository-1.0\gimp*.typelib (copy lib\girepository-1.0\gimp*.typelib $2\lib\girepository-1.0) > nul"
|
||||
set_path="set PATH=%PATH%;$2\bin"
|
||||
dl_typelib="@if exist MSYS2_PREFIX\lib\girepository-1.0\babl*.typelib (if exist lib\girepository-1.0\babl*.typelib (del $2\lib\girepository-1.0\babl*.typelib)) > nul
|
||||
@if exist MSYS2_PREFIX\lib\girepository-1.0\gegl*.typelib (if exist lib\girepository-1.0\gegl*.typelib (del $2\lib\girepository-1.0\gegl*.typelib)) > nul
|
||||
@if exist MSYS2_PREFIX\lib\girepository-1.0\gimp*.typelib (if exist lib\girepository-1.0\gimp*.typelib (del $2\lib\girepository-1.0\gimp*.typelib)) > nul"
|
||||
fi
|
||||
echo "@echo off
|
||||
echo This is a $1 native build of GIMP$3.
|
||||
echo .js (JavaScript) plug-ins ^|^ NOT supported!
|
||||
$interp_pyt
|
||||
echo .py (Python) plug-ins ^|^ supported.
|
||||
$interp_scm
|
||||
echo .scm (ScriptFu) plug-ins ^|^ supported.
|
||||
echo .vala (Vala) plug-ins ^|^ supported.
|
||||
echo.
|
||||
$cp_typelib
|
||||
$set_path
|
||||
bin\gimp-GIMP_APP_VERSION.exe
|
||||
$dl_typelib" > ${GIMP_PREFIX}/gimp.cmd
|
||||
sed -i "s/GIMP_API_VERSION/$(grep GIMP_PKGCONFIG_VERSION _build/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/')/g" ${GIMP_PREFIX}/gimp.cmd
|
||||
sed -i "s/GIMP_APP_VERSION/$(grep GIMP_APP_VERSION _build/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/')/g" ${GIMP_PREFIX}/gimp.cmd
|
||||
sed -i -e "s|MSYS2_PREFIX|c:\/msys64${MSYSTEM_PREFIX}|g" -e 's|c:/|c:\\|g;s|msys64/|msys64\\|g' ${GIMP_PREFIX}/gimp.cmd
|
||||
}
|
||||
|
||||
if [ -z "$GITLAB_CI" ] && [ "$1" != "--relocatable" ]; then
|
||||
make_cmd local MSYS2_PREFIX " (please run bin/gimp-GIMP_APP_VERSION.exe under $MSYSTEM shell)" do_wizardry
|
||||
elif [ "$GITLAB_CI" ] || [ "$1" = "--relocatable" ]; then
|
||||
make_cmd CI %cd% ""
|
||||
fi
|
||||
|
||||
|
||||
if [ "$GITLAB_CI" ] || [ "$1" = "--relocatable" ]; then
|
||||
# Bundle GIMP
|
||||
bash build/windows/2_bundle-gimp-uni_base.sh --authorized
|
||||
fi
|
|
@ -2,30 +2,12 @@
|
|||
|
||||
set -e
|
||||
|
||||
if [ "$1" != '--authorized' ] && [ "$1" != '--force' ]; then
|
||||
# We can't easily figure out if GIMP was built relocatable so
|
||||
# let's prevent contributors from creating broken bundles
|
||||
echo -e "\033[31m(ERROR)\033[0m: Script called standalone. Please, run GIMP build script with '--relocatable' or this bundling script with '--force'"
|
||||
if [ -z "$MESON_BUILD_ROOT" ]; then
|
||||
# Let's prevent contributors from creating broken bundles
|
||||
echo -e "\033[31m(ERROR)\033[0m: Script called standalone. Please, just build GIMP and this script will be called automatically."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = '--force' ] && [ "$MSYSTEM_CARCH" = "i686" ]; then
|
||||
echo -e "\033[33m(WARNING)\033[0m: 32-bit builds will be dropped in a future release. See: https://gitlab.gnome.org/GNOME/gimp/-/issues/10922"
|
||||
fi
|
||||
|
||||
|
||||
# NOTE: The bundling scripts, different from building scripts, need to set
|
||||
# the ARTIFACTS_SUFFIX, even locally: 1) to avoid confusion (bundle dirs are
|
||||
# relocatable so can be copied to a machine with other arch); and 2) to our
|
||||
# dist scripts fallback code be able to identify what they are distributing
|
||||
if [ "$MSYSTEM_CARCH" = "aarch64" ]; then
|
||||
export ARTIFACTS_SUFFIX="-a64"
|
||||
elif [ "$CI_JOB_NAME" = "gimp-win-x64-cross" ] || [ "$MSYSTEM_CARCH" = "x86_64" ]; then
|
||||
export ARTIFACTS_SUFFIX="-x64"
|
||||
else # [ "$MSYSTEM_CARCH" = "i686" ];
|
||||
export ARTIFACTS_SUFFIX="-x86"
|
||||
fi
|
||||
|
||||
|
||||
if [[ "$CI_JOB_NAME" =~ "cross" ]]; then
|
||||
apt-get update
|
||||
|
@ -39,109 +21,118 @@ fi
|
|||
|
||||
|
||||
# Bundle deps and GIMP files
|
||||
if [[ "$CI_JOB_NAME" =~ "cross" ]]; then
|
||||
export GIMP_PREFIX="`realpath ./_install-cross`"
|
||||
export MSYS_PREFIX="$GIMP_PREFIX"
|
||||
else
|
||||
if [ "$GITLAB_CI" ]; then
|
||||
export GIMP_PREFIX="$PWD/_install"
|
||||
elif [ -z "$GITLAB_CI" ] && [ -z "$GIMP_PREFIX" ]; then
|
||||
export GIMP_PREFIX="$PWD/../_install"
|
||||
fi
|
||||
export MSYS_PREFIX="$MSYSTEM_PREFIX"
|
||||
export GIMP_SOURCE=$(echo $MESON_SOURCE_ROOT | sed 's|\\|/|g')
|
||||
grep -q 'windows-installer=true' meson-logs/meson-log.txt && export INSTALLER_OPTION_ON=1
|
||||
grep -q 'ms-store=true' meson-logs/meson-log.txt && export STORE_OPTION_ON=1
|
||||
if [ "$GITLAB_CI" ] || [ "$INSTALLER_OPTION_ON" ] || [ "$STORE_OPTION_ON" ]; then
|
||||
export PERFECT_BUNDLE=1
|
||||
fi
|
||||
|
||||
## GIMP prefix: as set at meson configure time
|
||||
export GIMP_PREFIX=$(echo $MESON_INSTALL_DESTDIR_PREFIX | sed 's|\\|/|g')
|
||||
## System prefix: on Windows shell, it is manually set; on POSIX shell, it is set by crossroad
|
||||
export MSYS_PREFIX=$(grep 'Main binary:' $MESON_BUILD_ROOT/meson-logs/meson-log.txt | sed 's|Main binary: ||' | sed 's|\\bin\\python.exe||' | sed 's|\\|/|g')
|
||||
if [ "$CROSSROAD_PLATFORM" ]; then
|
||||
export MSYS_PREFIX="$GIMP_PREFIX"
|
||||
fi
|
||||
## Bundle dir: normally, we make a quick bundling; on CI, we make a "perfect" bundling
|
||||
export GIMP_DISTRIB="$GIMP_PREFIX"
|
||||
if [ "$PERFECT_BUNDLE" ]; then
|
||||
#NOTE: The bundling script need to set ARTIFACTS_SUFFIX to our dist scripts
|
||||
#fallback code be able to identify what arch they are distributing
|
||||
#https://github.com/msys2/MSYS2-packages/issues/4960
|
||||
if [[ "$MSYS_PREFIX" =~ "clangarm64" ]]; then
|
||||
export ARTIFACTS_SUFFIX="a64"
|
||||
elif [[ "$MSYS_PREFIX" =~ "clang64" ]] || [ "$CROSSROAD_PLATFORM" = "w64" ]; then
|
||||
export ARTIFACTS_SUFFIX="x64"
|
||||
else # [ "$MSYS_PREFIX" =~ "mingw32" ];
|
||||
export ARTIFACTS_SUFFIX="x86"
|
||||
fi
|
||||
export GIMP_DISTRIB="$GIMP_SOURCE/gimp-${ARTIFACTS_SUFFIX}"
|
||||
fi
|
||||
export GIMP_DISTRIB="`realpath ./gimp`${ARTIFACTS_SUFFIX}"
|
||||
|
||||
bundle ()
|
||||
{
|
||||
check_recurse=${2##*/}
|
||||
# Copy files with wildcards
|
||||
if [[ "$check_recurse" =~ '*' ]] && [[ ! "$check_recurse" =~ '/' ]]; then
|
||||
path_dest_parent=$(echo $1/${2%/*} | sed "s|${1}/||")
|
||||
mkdir -p "$GIMP_DISTRIB/$path_dest_parent"
|
||||
bundledArray=($(find $1/${2%/*} -maxdepth 1 -name ${2##*/}))
|
||||
for path_origin_full2 in "${bundledArray[@]}"; do
|
||||
echo "(INFO): copying $path_origin_full2 to $GIMP_DISTRIB/$path_dest_parent"
|
||||
cp $path_origin_full2 "$GIMP_DISTRIB/$path_dest_parent"
|
||||
done
|
||||
# Copy specific file or specific folder
|
||||
else
|
||||
path_origin_full=$(echo $1/$2)
|
||||
if [[ "$2" =~ '/' ]]; then
|
||||
path_dest_parent=$(dirname $path_origin_full | sed "s|${1}/||")
|
||||
limited_search_path=$(dirname $(echo $2 | sed "s|${2%%/*}/|$1/${2%%/*}/|g" | sed "s|*|no_scape|g"))
|
||||
search_path=$(echo $(echo $limited_search_path | sed "s|no_scape|*|g"))
|
||||
bundledArray=($(find "$search_path" -maxdepth 1 -name ${2##*/}))
|
||||
for target_path in "${bundledArray[@]}"; do
|
||||
bundled_path=$(echo $target_path | sed "s|$1/|$GIMP_DISTRIB/|g")
|
||||
parent_path=$(dirname $bundled_path)
|
||||
if [ "$1" != "$GIMP_PREFIX" ] || [ "$PERFECT_BUNDLE" ]; then
|
||||
echo "Bundling $target_path to $parent_path"
|
||||
fi
|
||||
if [ -d "$path_origin_full" ] || [ -f "$path_origin_full" ]; then
|
||||
mkdir -p "$GIMP_DISTRIB/$path_dest_parent"
|
||||
echo "(INFO): copying $path_origin_full to $GIMP_DISTRIB/$path_dest_parent"
|
||||
cp -r "$path_origin_full" "$GIMP_DISTRIB/$path_dest_parent"
|
||||
else
|
||||
echo -e "\033[33m(WARNING)\033[0m: $path_origin_full does not exist!"
|
||||
fi
|
||||
fi
|
||||
mkdir -p "$parent_path"
|
||||
cp -fru "$target_path" $parent_path >/dev/null 2>&1 || continue
|
||||
done
|
||||
}
|
||||
|
||||
clean ()
|
||||
{
|
||||
if [[ "$2" =~ '/' ]]; then
|
||||
cleanedArray=($(find $1/${2%/*} -iname ${2##*/}))
|
||||
else
|
||||
cleanedArray=($(find $1/ -iname ${2##*/}))
|
||||
fi
|
||||
for path_dest_full in "${cleanedArray[@]}"; do
|
||||
if [[ "$path_dest_full" = "${cleanedArray[0]}" ]]; then
|
||||
echo "(INFO): cleaning $1/$2"
|
||||
if [ "$PERFECT_BUNDLE" ]; then
|
||||
if [[ "$2" =~ '/' ]]; then
|
||||
cleanedArray=($(find $1/${2%/*} -iname ${2##*/}))
|
||||
else
|
||||
cleanedArray=($(find $1/ -iname ${2##*/}))
|
||||
fi
|
||||
rm $path_dest_full
|
||||
done
|
||||
for path_dest_full in "${cleanedArray[@]}"; do
|
||||
if [[ "$path_dest_full" = "${cleanedArray[0]}" ]]; then
|
||||
echo "Cleaning $1/$2"
|
||||
fi
|
||||
rm $path_dest_full
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
## Prevent Git going crazy
|
||||
mkdir -p $GIMP_DISTRIB
|
||||
echo "*" > $GIMP_DISTRIB/.gitignore
|
||||
if [ "$PERFECT_BUNDLE" ]; then
|
||||
echo "*" > $GIMP_DISTRIB/.gitignore
|
||||
fi
|
||||
|
||||
## Copy a previously built wrapper at tree root, less messy than
|
||||
## having to look inside bin/, in the middle of all the DLLs.
|
||||
## This also configure the interpreters for local builds as courtesy.
|
||||
bundle "$GIMP_PREFIX" gimp.cmd
|
||||
## Add a wrapper at tree root, less messy than having to look for the
|
||||
## binary inside bin/, in the middle of all the DLLs.
|
||||
gimp_app_version=$(grep GIMP_APP_VERSION $MESON_BUILD_ROOT/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/')
|
||||
echo "bin\gimp-$gimp_app_version.exe" > $GIMP_DISTRIB/gimp.cmd
|
||||
|
||||
|
||||
## Settings.
|
||||
bundle "$GIMP_PREFIX" etc/gimp/
|
||||
bundle "$GIMP_PREFIX" etc/gimp
|
||||
### Needed for fontconfig
|
||||
bundle "$MSYS_PREFIX" etc/fonts/
|
||||
bundle "$MSYS_PREFIX" etc/fonts
|
||||
|
||||
|
||||
## Headers (in evaluation): https://gitlab.gnome.org/GNOME/gimp/-/issues/6378.
|
||||
#bundle $GIMP_PREFIX/include/gimp-*/
|
||||
#bundle $GIMP_PREFIX/include/babl-*/
|
||||
#bundle $GIMP_PREFIX/include/gegl-*/
|
||||
#bundle $GIMP_PREFIX/include/gimp-*
|
||||
#bundle $GIMP_PREFIX/include/babl-*
|
||||
#bundle $GIMP_PREFIX/include/gegl-*
|
||||
|
||||
|
||||
## Library data.
|
||||
bundle "$GIMP_PREFIX" lib/gimp/
|
||||
bundle "$GIMP_PREFIX" lib/babl-*/
|
||||
bundle "$GIMP_PREFIX" lib/gegl-*/
|
||||
bundle "$MSYS_PREFIX" lib/gio/
|
||||
bundle "$GIMP_PREFIX" lib/gimp
|
||||
bundle "$GIMP_PREFIX" lib/babl-*
|
||||
bundle "$GIMP_PREFIX" lib/gegl-*
|
||||
bundle "$MSYS_PREFIX" lib/gio
|
||||
bundle "$MSYS_PREFIX" lib/gdk-pixbuf-*/*/loaders.cache
|
||||
bundle "$MSYS_PREFIX" lib/gdk-pixbuf-*/*/loaders/libpixbufloader-png.dll
|
||||
bundle "$MSYS_PREFIX" lib/gdk-pixbuf-*/*/loaders/libpixbufloader-svg.dll
|
||||
bundle "$MSYS_PREFIX" lib/gdk-pixbuf-*/*/loaders/pixbufloader_svg.dll
|
||||
clean "$GIMP_DISTRIB" lib/*.a
|
||||
|
||||
|
||||
## Resources.
|
||||
bundle "$GIMP_PREFIX" share/gimp/
|
||||
bundle "$GIMP_PREFIX" share/gimp
|
||||
### Needed for file dialogs
|
||||
bundle "$MSYS_PREFIX" share/glib-*/schemas/gschemas.compiled
|
||||
### https://gitlab.gnome.org/GNOME/gimp/-/issues/6165
|
||||
bundle "$MSYS_PREFIX" share/icons/Adwaita/
|
||||
bundle "$MSYS_PREFIX" share/icons/Adwaita
|
||||
### https://gitlab.gnome.org/GNOME/gimp/-/issues/5080
|
||||
bundle "$GIMP_PREFIX" share/icons/hicolor/
|
||||
bundle "$GIMP_PREFIX" share/icons/hicolor
|
||||
### Needed for file-wmf work
|
||||
bundle "$MSYS_PREFIX" share/libwmf/
|
||||
bundle "$MSYS_PREFIX" share/libwmf
|
||||
### Only copy from langs supported in GIMP.
|
||||
lang_array=($(echo $(ls po/*.po |
|
||||
sed -e 's|po/||g' -e 's|.po||g' | sort) |
|
||||
lang_array=($(echo $(ls $GIMP_SOURCE/po/*.po |
|
||||
sed -e "s|$GIMP_SOURCE/po/||g" -e 's|.po||g' | sort) |
|
||||
tr '\n\r' ' '))
|
||||
for lang in "${lang_array[@]}"; do
|
||||
bundle "$GIMP_PREFIX" share/locale/$lang/LC_MESSAGES/*.mo
|
||||
|
@ -154,9 +145,9 @@ done
|
|||
### Needed for welcome page
|
||||
bundle "$GIMP_PREFIX" share/metainfo/org.gimp*.xml
|
||||
### mypaint brushes
|
||||
bundle "$MSYS_PREFIX" share/mypaint-data/
|
||||
bundle "$MSYS_PREFIX" share/mypaint-data
|
||||
### Needed for full CJK and Cyrillic support in file-pdf
|
||||
bundle "$MSYS_PREFIX" share/poppler/
|
||||
bundle "$MSYS_PREFIX" share/poppler
|
||||
|
||||
|
||||
## Executables and DLLs.
|
||||
|
@ -166,6 +157,7 @@ rm -f done-dll.list
|
|||
|
||||
### Minimal (and some additional) executables for the 'bin' folder
|
||||
bundle "$GIMP_PREFIX" bin/gimp*.exe
|
||||
bundle "$GIMP_PREFIX" bin/libgimp*.dll
|
||||
### https://gitlab.gnome.org/GNOME/gimp/-/issues/10580
|
||||
bundle "$GIMP_PREFIX" bin/gegl*.exe
|
||||
### https://gitlab.gnome.org/GNOME/gimp/-/issues/6045
|
||||
|
@ -175,16 +167,16 @@ bundle "$MSYS_PREFIX" bin/gdbus.exe
|
|||
|
||||
### Optional binaries for GObject Introspection support
|
||||
if [ "$CI_JOB_NAME" != 'gimp-win-x64-cross' ]; then
|
||||
bundle "$GIMP_PREFIX" lib/girepository-*/
|
||||
bundle "$MSYS_PREFIX" lib/girepository-*/
|
||||
bundle "$GIMP_PREFIX" lib/girepository-*
|
||||
bundle "$MSYS_PREFIX" lib/girepository-*
|
||||
|
||||
# https://gitlab.gnome.org/GNOME/gimp/-/issues/11597
|
||||
#bundle "$MSYS_PREFIX" bin/luajit.exe
|
||||
#bundle "$MSYS_PREFIX" lib/lua/
|
||||
#bundle "$MSYS_PREFIX" share/lua/
|
||||
#bundle "$MSYS_PREFIX" lib/lua
|
||||
#bundle "$MSYS_PREFIX" share/lua
|
||||
|
||||
bundle "$MSYS_PREFIX" bin/python*.exe
|
||||
bundle "$MSYS_PREFIX" lib/python*/
|
||||
bundle "$MSYS_PREFIX" lib/python*
|
||||
clean "$GIMP_DISTRIB" lib/python*/*.pyc
|
||||
else
|
||||
# Just to ensure there is no introspected files that will output annoying warnings
|
||||
|
@ -195,16 +187,16 @@ else
|
|||
clean "$GIMP_DISTRIB" *.vala
|
||||
fi
|
||||
|
||||
### Deps (DLLs) of the binaries in 'lib' and 'bin' dirs
|
||||
echo "(INFO): searching for dependencies of $GIMP_DISTRIB/lib in $GIMP_PREFIX and $MSYS_PREFIX"
|
||||
libArray=($(find "$GIMP_DISTRIB/lib" \( -iname '*.dll' -or -iname '*.exe' \)))
|
||||
for dep in "${libArray[@]}"; do
|
||||
python3 build/windows/2_bundle-gimp-uni_dep.py $dep $GIMP_PREFIX/ $MSYS_PREFIX/ $GIMP_DISTRIB --output-dll-list done-dll.list;
|
||||
done
|
||||
echo "(INFO): searching for dependencies of $GIMP_DISTRIB/bin in $GIMP_PREFIX and $MSYS_PREFIX"
|
||||
### Deps (DLLs) of the binaries in 'bin' and 'lib' dirs
|
||||
echo "Searching for dependencies of $GIMP_DISTRIB/bin in $MSYS_PREFIX and $GIMP_PREFIX"
|
||||
binArray=($(find "$GIMP_DISTRIB/bin" \( -iname '*.dll' -or -iname '*.exe' \)))
|
||||
for dep in "${binArray[@]}"; do
|
||||
python3 build/windows/2_bundle-gimp-uni_dep.py $dep $GIMP_PREFIX/ $MSYS_PREFIX/ $GIMP_DISTRIB --output-dll-list done-dll.list;
|
||||
python3 $GIMP_SOURCE/build/windows/2_bundle-gimp-uni_dep.py $dep $MSYS_PREFIX/ $GIMP_PREFIX/ $GIMP_DISTRIB --output-dll-list done-dll.list;
|
||||
done
|
||||
echo "Searching for dependencies of $GIMP_DISTRIB/lib in $MSYS_PREFIX and $GIMP_PREFIX"
|
||||
libArray=($(find "$GIMP_DISTRIB/lib" \( -iname '*.dll' -or -iname '*.exe' \)))
|
||||
for dep in "${libArray[@]}"; do
|
||||
python3 $GIMP_SOURCE/build/windows/2_bundle-gimp-uni_dep.py $dep $MSYS_PREFIX/ $GIMP_PREFIX/ $GIMP_DISTRIB --output-dll-list done-dll.list;
|
||||
done
|
||||
|
||||
### .pdb (CodeView) debug symbols
|
||||
|
@ -212,8 +204,3 @@ done
|
|||
#if [ "$CI_JOB_NAME" != "gimp-win-x64-cross" ]; then
|
||||
# cp -fr ${GIMP_PREFIX}/bin/*.pdb ${GIMP_DISTRIB}/bin/
|
||||
#fi
|
||||
|
||||
|
||||
# Delete wrapper to prevent contributors from running a
|
||||
# relocatable build expecting it to work non-relocatable
|
||||
rm -r $GIMP_PREFIX/gimp.cmd
|
||||
|
|
|
@ -147,7 +147,7 @@ def copy_dlls(dll_list, srcdirs, destdir):
|
|||
for srcdir in srcdirs:
|
||||
full_file_name = os.path.join(srcdir, bindir, dll)
|
||||
if os.path.isfile(full_file_name):
|
||||
sys.stdout.write("(INFO): copying {} to {}\n".format(full_file_name, destbin))
|
||||
sys.stdout.write("Bundling {} to {}\n".format(full_file_name, destbin))
|
||||
shutil.copy(full_file_name, destbin)
|
||||
break
|
||||
else:
|
||||
|
|
|
@ -47,5 +47,4 @@ ${MINGW_PACKAGE_PREFIX}-python-gobject \
|
|||
${MINGW_PACKAGE_PREFIX}-qoi \
|
||||
${MINGW_PACKAGE_PREFIX}-shared-mime-info \
|
||||
${MINGW_PACKAGE_PREFIX}-suitesparse \
|
||||
${MINGW_PACKAGE_PREFIX}-vala \
|
||||
${MINGW_PACKAGE_PREFIX}-xpm-nox
|
||||
|
|
|
@ -9,7 +9,7 @@ param ($revision = '0',
|
|||
$GIMPA64 = 'gimp-a64')
|
||||
|
||||
# This script needs a bit of MSYS2 to work
|
||||
$Env:CHERE_INVOKING = "yes"
|
||||
Invoke-Expression ((Get-Content build\windows\1_build-deps-msys2.ps1 | Select-String 'MSYS2_PREFIX =' -Context 0,17) -replace '> ','')
|
||||
|
||||
|
||||
# 1. GET INNO
|
||||
|
@ -42,7 +42,7 @@ Set-Alias iscc "$INNO_PATH\iscc.exe"
|
|||
$CONFIG_PATH = "$BUILD_DIR\config.h"
|
||||
if (-not (Test-Path "$CONFIG_PATH"))
|
||||
{
|
||||
Write-Host "(ERROR): config.h file not found. You can run 'build/windows/2_build-gimp-msys2.sh --relocatable' or configure GIMP with 'meson setup' on some MSYS2 shell to generate it.'" -ForegroundColor red
|
||||
Write-Host "(ERROR): config.h file not found. You can run 'build/windows/2_build-gimp-msys2.ps1' or configure GIMP to generate it.'" -ForegroundColor red
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ Write-Output "(INFO): Arch: universal (x86, x64 and arm64)"
|
|||
# 3. PREPARE INSTALLER "SOURCE"
|
||||
if (-not (Test-Path "$BUILD_DIR\build\windows\installer"))
|
||||
{
|
||||
Write-Host "(ERROR): Installer assets not found. You can run 'build/windows/2_build-gimp-msys2.sh --relocatable' or configure GIMP with '-Dwindows-installer=true' on some MSYS2 shell to build them." -ForegroundColor red
|
||||
Write-Host "(ERROR): Installer assets not found. You can tweak 'build/windows/2_build-gimp-msys2.ps1' or configure GIMP with '-Dwindows-installer=true' to build them." -ForegroundColor red
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
@ -123,7 +123,7 @@ function fix_msg ([string]$langsdir)
|
|||
Set-Location $langsdir
|
||||
(Get-Content fix_msg.sh) | Foreach-Object {$_ -replace "AppVer","$APPVER"} |
|
||||
Set-Content fix_msg.sh
|
||||
C:\msys64\usr\bin\bash -lc "bash fix_msg.sh"
|
||||
bash fix_msg.sh
|
||||
Remove-Item fix_msg.sh
|
||||
Set-Location $GIMP_BASE
|
||||
|
||||
|
@ -160,24 +160,9 @@ if ($GITLAB_CI)
|
|||
}
|
||||
}
|
||||
|
||||
## FIXME: We can't do this on CI
|
||||
if (-not $GITLAB_CI)
|
||||
{
|
||||
Write-Output "(INFO): extracting .debug symbols from bundles"
|
||||
|
||||
#$Env:MSYSTEM = "MINGW32"
|
||||
#C:\msys64\usr\bin\bash -lc 'bash build/windows/installer/3_dist-gimp-inno_sym.sh' | Out-Null
|
||||
|
||||
if ($Env:PROCESSOR_ARCHITECTURE -eq 'ARM64')
|
||||
{
|
||||
$Env:MSYSTEM = "CLANGARM64"
|
||||
}
|
||||
else
|
||||
{
|
||||
$Env:MSYSTEM = "CLANG64"
|
||||
}
|
||||
C:\msys64\usr\bin\bash -lc 'bash build/windows/installer/3_dist-gimp-inno_sym.sh' | Out-Null
|
||||
}
|
||||
## Split .debug symbols
|
||||
Write-Output "(INFO): extracting .debug symbols from bundles"
|
||||
bash build/windows/installer/3_dist-gimp-inno_sym.sh | Out-Null
|
||||
|
||||
|
||||
# 5. CONSTRUCT .EXE INSTALLER
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ "$MSYSTEM_CARCH" != 'i686' ]; then
|
||||
if [ "$MSYSTEM_PREFIX" != 'mingw32' ]; then
|
||||
archsArray=('-a64'
|
||||
'-x64')
|
||||
else
|
||||
|
|
|
@ -30,7 +30,7 @@ Set-Alias 'signtool' "$win_sdk_path\signtool.exe"
|
|||
$config_path = "$build_dir\config.h"
|
||||
if (-not (Test-Path "$config_path"))
|
||||
{
|
||||
Write-Host "(ERROR): config.h file not found. You can run 'build/windows/2_build-gimp-msys2.sh --relocatable' or configure GIMP with 'meson setup' on some MSYS2 shell to generate it." -ForegroundColor red
|
||||
Write-Host "(ERROR): config.h file not found. You can run 'build/windows/2_build-gimp-msys2.ps1' or configure GIMP to generate it." -ForegroundColor red
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
@ -107,7 +107,7 @@ Write-Output "(INFO): Identity: $IDENTITY_NAME | Version: $CUSTOM_GIMP_VERSION (
|
|||
# Autodetects what arch bundles will be packaged
|
||||
if (-not (Test-Path "$a64_bundle") -and -not (Test-Path "$x64_bundle"))
|
||||
{
|
||||
Write-Host "(ERROR): No bundle found. You can run 'build/windows/2_build-gimp-msys2.sh --relocatable' on some MSYS2 shell to make one." -ForegroundColor red
|
||||
Write-Host "(ERROR): No bundle found. You can tweak 'build/windows/2_build-gimp-msys2.ps1' or configure GIMP with '-Dms-store=true' to make one." -ForegroundColor red
|
||||
exit 1
|
||||
}
|
||||
elseif ((Test-Path "$a64_bundle") -and -not (Test-Path "$x64_bundle"))
|
||||
|
@ -203,7 +203,7 @@ foreach ($bundle in $supported_archs)
|
|||
$icons_path = "$build_dir\build\windows\store\Assets"
|
||||
if (-not (Test-Path "$icons_path"))
|
||||
{
|
||||
Write-Host "(ERROR): MS Store icons not found. You can run 'build/windows/2_build-gimp-msys2.sh --relocatable' or configure GIMP with '-Dms-store=true' on some MSYS2 shell to build them." -ForegroundColor red
|
||||
Write-Host "(ERROR): MS Store icons not found. You can tweak 'build/windows/2_build-gimp-msys2.ps1' or configure GIMP with '-Dms-store=true' to build them." -ForegroundColor red
|
||||
exit 1
|
||||
}
|
||||
Write-Output "(INFO): generating resources.pri from $icons_path"
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 31009e305c101967c7e274e31dee364b47f2beb8
|
||||
Subproject commit da582e7e041689014fd175e39f10b7a7d32d526c
|
|
@ -1929,6 +1929,9 @@ if meson.can_run_host_binaries() and have_gobject_introspection
|
|||
gimp_run_env.append('GIMP_TESTING_INTERPRETER_DIRS', meson.global_build_root() / 'extensions/')
|
||||
gimp_run_env.set('GIMP_TESTING_ENVIRON_DIRS', meson.global_source_root() / 'data/environ/')
|
||||
|
||||
# Makes build errors output way less polluted, making easier to debug
|
||||
gimp_run_env.set('GIMP3_LOCALEDIR', meson.global_build_root() / 'po-plug-ins')
|
||||
|
||||
gimp_run_env.prepend('GI_TYPELIB_PATH', prefix / 'lib/girepository-1.0/')
|
||||
if platform_osx
|
||||
gimp_run_env.prepend('GI_TYPELIB_PATH', meson.global_build_root() / 'libgimp/tmp')
|
||||
|
@ -2077,6 +2080,12 @@ pkgconfig.generate(libgimpui,
|
|||
# meson.add_install_script(install_win_debug_script)
|
||||
#endif
|
||||
|
||||
# On Windows, install deps making a bundle in the prefix
|
||||
if platform_windows and relocatable_bundle
|
||||
install_win_bundling_script = find_program('build/windows/2_bundle-gimp-uni_base.sh')
|
||||
meson.add_install_script(install_win_bundling_script)
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Subdir installations
|
||||
|
||||
|
|
|
@ -75,17 +75,17 @@ enum_headers = [
|
|||
]
|
||||
|
||||
# Perl environment
|
||||
perlsrcdir = meson.current_source_dir()
|
||||
perlbindir = meson.current_build_dir()
|
||||
perlsrcdir = meson.current_source_dir().replace('\\', '/')
|
||||
perlbindir = meson.current_build_dir().replace('\\', '/')
|
||||
|
||||
perl_env = [
|
||||
'PDBGEN_BACKUP=' + (pdbgen_backup ? '1' : '0'),
|
||||
'PDBGEN_GROUPS=' + (pdbgen_groups ? '1' : '0'),
|
||||
'rootme=' + perlbindir,
|
||||
'srcdir=' + perlsrcdir,
|
||||
'destdir=' + meson.project_build_root(),
|
||||
'builddir=' + meson.project_build_root(),
|
||||
'topsrcdir=' + meson.project_source_root(),
|
||||
'destdir=' + meson.project_build_root().replace('\\', '/'),
|
||||
'builddir=' + meson.project_build_root().replace('\\', '/'),
|
||||
'topsrcdir=' + meson.project_source_root().replace('\\', '/'),
|
||||
]
|
||||
|
||||
groups_pl_content = '# This file is autogenerated\n'
|
||||
|
|
Loading…
Reference in New Issue