Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix rotopaint overlay #982

Closed
wants to merge 19 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 14 additions & 13 deletions .github/workflows/build_installer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ jobs:
run: |
pacman -Rs --noconfirm mingw-w64-x86_64-natron-build-deps-qt5

- name: Upload artifacts
uses: actions/upload-artifact@v4.3.1
with:
name: ${{ steps.build.outputs.INSTALLER_NAME }}
path: ${{ steps.build.outputs.INSTALLER_DIR }}

- name: Verify plugin loading
run: |
INSTALLER_DIR=$(cygpath -u '${{ steps.build.outputs.INSTALLER_DIR }}')/${{ steps.build.outputs.INSTALLER_NAME }}
Expand All @@ -75,11 +81,6 @@ jobs:
PATH=${INSTALLER_DIR}/bin ./verify_plugin_loads.exe "${x}"
done

- name: Upload artifacts
uses: actions/upload-artifact@v4.3.1
with:
name: ${{ steps.build.outputs.INSTALLER_NAME }}
path: ${{ steps.build.outputs.INSTALLER_DIR }}

win-installer-breakpad:
name: Windows Installer (with Breakpad crash reporting)
Expand Down Expand Up @@ -149,14 +150,6 @@ jobs:
run: |
pacman -Rs --noconfirm mingw-w64-x86_64-natron-build-deps-qt5

- name: Verify plugin loading
run: |
INSTALLER_DIR=$(cygpath -u '${{ steps.build.outputs.INSTALLER_DIR }}')/${{ steps.build.outputs.INSTALLER_NAME }}
for x in $(find ${INSTALLER_DIR}/Plugins -name *.ofx); do
echo "Testing $(basename ${x}) ..."
PATH=${INSTALLER_DIR}/bin ./verify_plugin_loads.exe "${x}"
done

- name: Upload installer
uses: actions/upload-artifact@v4.3.1
with:
Expand All @@ -168,3 +161,11 @@ jobs:
with:
name: ${{ steps.build.outputs.SYMBOLS_NAME }}
path: ${{ steps.build.outputs.SYMBOLS_DIR }}

- name: Verify plugin loading
run: |
INSTALLER_DIR=$(cygpath -u '${{ steps.build.outputs.INSTALLER_DIR }}')/${{ steps.build.outputs.INSTALLER_NAME }}
for x in $(find ${INSTALLER_DIR}/Plugins -name *.ofx); do
echo "Testing $(basename ${x}) ..."
PATH=${INSTALLER_DIR}/bin ./verify_plugin_loads.exe "${x}"
done
27 changes: 27 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,19 @@ set(CMAKE_CXX_STANDARD 14)
option(NATRON_SYSTEM_LIBS "use system versions of dependencies instead of bundled ones" OFF)
option(NATRON_BUILD_TESTS "build the Natron test suite" ON)

set(IS_DEBUG_BUILD OFF)
if(CMAKE_BUILD_TYPE MATCHES "^(debug|Debug|DEBUG)$")
set(IS_DEBUG_BUILD ON)
add_definitions(-DDEBUG)

if(WIN32)
# Debug builds need minimal optimizations to avoid excessive link times and link errors related to Eigen.
add_compile_options(-O)
endif()
else()
add_definitions(-DQT_NO_DEBUG_OUTPUT)
endif()

if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE)
message(STATUS "Setting build type to '${CMAKE_BUILD_TYPE}' as none was specified.")
Expand All @@ -43,7 +56,21 @@ if(WIN32)
endif()
find_package(Python3 COMPONENTS Interpreter Development)
find_package(Qt5 5.15 CONFIG REQUIRED COMPONENTS Core Gui Network Widgets Concurrent)

if(IS_DEBUG_BUILD AND WIN32)
# Explicitly setting SHIBOKEN_PYTHON_LIBRARIES variable to avoid PYTHON_DEBUG_LIBRARY-NOTFOUND
# link errors on Windows debug builds.
set(SHIBOKEN_PYTHON_LIBRARIES ${Python3_LIBRARIES})
endif()
find_package(Shiboken2 5.15 CONFIG REQUIRED COMPONENTS libshiboken2 shiboken2)

if(IS_DEBUG_BUILD AND WIN32)
# Remove NDEBUG from Shiboken2 INTERFACE_COMPILE_DEFINITIONS so it is not inherited in debug builds.
get_property(ShibokenInterfaceDefs TARGET Shiboken2::libshiboken PROPERTY INTERFACE_COMPILE_DEFINITIONS)
list(REMOVE_ITEM ShibokenInterfaceDefs NDEBUG)
set_property(TARGET Shiboken2::libshiboken PROPERTY INTERFACE_COMPILE_DEFINITIONS ShibokenInterfaceDefs)
endif()

find_package(PySide2 5.15 CONFIG REQUIRED COMPONENTS pyside2)
set(QT_VERSION_MAJOR 5)
get_target_property(PYSIDE_INCLUDE_DIRS PySide2::pyside2 INTERFACE_INCLUDE_DIRECTORIES)
Expand Down
3 changes: 1 addition & 2 deletions Engine/Image.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -857,8 +857,7 @@ Image::makeParams(const RectD & rod, // the image rod in canonical coordinate
U32 textureTarget)
{
#ifdef DEBUG
RectI pixelRod;
rod.toPixelEnclosing(mipmapLevel, par, &pixelRod);
const RectI pixelRod = rod.toPixelEnclosing(mipmapLevel, par);
assert( bounds.left() >= pixelRod.left() && bounds.right() <= pixelRod.right() &&
bounds.bottom() >= pixelRod.bottom() && bounds.top() <= pixelRod.top() );
#endif
Expand Down
33 changes: 25 additions & 8 deletions Engine/OSGLContext_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,18 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;

NATRON_NAMESPACE_ENTER

namespace {

bool makeDCAndContextCurrent(HDC dc, HGLRC context)
{
const OSGLContext_wgl_data* wglInfo = appPTR->getWGLData();

assert(wglInfo);
return wglInfo->MakeCurrent(dc, context);
}

} // namespace

bool
OSGLContext_win::extensionSupported(const char* extension,
OSGLContext_wgl_data* data)
Expand Down Expand Up @@ -96,6 +108,7 @@ OSGLContext_win::initWGLData(OSGLContext_wgl_data* wglInfo)
wglInfo->CreateContext = (WGLCREATECONTEXT_T)GetProcAddress(wglInfo->instance, "wglCreateContext");
wglInfo->DeleteContext = (WGLDELETECONTEXT_T)GetProcAddress(wglInfo->instance, "wglDeleteContext");
wglInfo->GetCurrentContext = (WGLGETCURRENTCONTEXT_T)GetProcAddress(wglInfo->instance, "wglGetCurrentContext");
wglInfo->GetCurrentDC = (WGLGETCURRENTDC_T)GetProcAddress(wglInfo->instance, "wglGetCurrentDC");
wglInfo->GetProcAddress = (WGLGETPROCADDRESS_T)GetProcAddress(wglInfo->instance, "wglGetProcAddress");
wglInfo->MakeCurrent = (WGLMAKECURRENT_T)GetProcAddress(wglInfo->instance, "wglMakeCurrent");
wglInfo->ShareLists = (WGLSHARELISTS_T)GetProcAddress(wglInfo->instance, "wglShareLists");
Expand Down Expand Up @@ -606,18 +619,16 @@ OSGLContext_win::~OSGLContext_win()
bool
OSGLContext_win::makeContextCurrent(const OSGLContext_win* context)
{
const OSGLContext_wgl_data* wglInfo = appPTR->getWGLData();

assert(wglInfo);
if (context) {
return wglInfo->MakeCurrent(context->_dc, context->_handle);
return makeDCAndContextCurrent(context->_dc, context->_handle);
} else {
return wglInfo->MakeCurrent(0, 0);
return makeDCAndContextCurrent(0, 0);
}
}

bool
OSGLContext_win::threadHasACurrentContext() {
OSGLContext_win::threadHasACurrentContext()
{
const OSGLContext_wgl_data* wglInfo = appPTR->getWGLData();
assert(wglInfo);
return wglInfo->GetCurrentContext() != nullptr;
Expand Down Expand Up @@ -722,7 +733,11 @@ namespace {
class ScopedGLContext {
public:
ScopedGLContext(const GLRendererID& gid) {
assert(!OSGLContext_win::threadHasACurrentContext());
const OSGLContext_wgl_data* wglInfo = appPTR->getWGLData();
assert(wglInfo);
_oldDc = wglInfo->GetCurrentDC();
_oldContext = wglInfo->GetCurrentContext();

try {
_context = std::make_unique<OSGLContext_win>(FramebufferConfig(), GLVersion.major, GLVersion.minor, false, gid, nullptr);
} catch (const std::exception& e) {
Expand All @@ -737,14 +752,16 @@ class ScopedGLContext {

~ScopedGLContext() {
if (_context) {
OSGLContext_win::makeContextCurrent(nullptr);
makeDCAndContextCurrent(_oldDc, _oldContext);
}
}

explicit operator bool() const { return (bool)_context; }

private:
std::unique_ptr<OSGLContext_win> _context;
HDC _oldDc = nullptr;
HGLRC _oldContext = nullptr;
};
} // namespace

Expand Down
2 changes: 2 additions & 0 deletions Engine/OSGLContext_win.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ typedef PROC (WINAPI * WGLGETPROCADDRESS_T)(LPCSTR);
typedef BOOL (WINAPI * WGLMAKECURRENT_T)(HDC, HGLRC);
typedef BOOL (WINAPI * WGLSHARELISTS_T)(HGLRC, HGLRC);
typedef HGLRC (WINAPI * WGLGETCURRENTCONTEXT_T)();
typedef HDC (WINAPI * WGLGETCURRENTDC_T)();

////////// https://www.opengl.org/registry/specs/NV/gpu_affinity.txt

Expand Down Expand Up @@ -157,6 +158,7 @@ struct OSGLContext_wgl_data
WGLCREATECONTEXT_T CreateContext;
WGLDELETECONTEXT_T DeleteContext;
WGLGETCURRENTCONTEXT_T GetCurrentContext;
WGLGETCURRENTDC_T GetCurrentDC;
WGLGETPROCADDRESS_T GetProcAddress;
WGLMAKECURRENT_T MakeCurrent;
WGLSHARELISTS_T ShareLists;
Expand Down
3 changes: 1 addition & 2 deletions Engine/OfxEffectInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2046,8 +2046,7 @@ OfxEffectInstance::render(const RenderActionArgs& args)
// check the dimensions of output images
const RectI & dstBounds = firstPlane.second->getBounds();
const RectD & dstRodCanonical = firstPlane.second->getRoD();
RectI dstRod;
dstRodCanonical.toPixelEnclosing(args.mappedScale, firstPlane.second->getPixelAspectRatio(), &dstRod);
const RectI dstRod = dstRodCanonical.toPixelEnclosing( args.mappedScale, firstPlane.second->getPixelAspectRatio() );

if ( !supportsTiles() && !isDuringPaintStrokeCreationThreadLocal() ) {
// http://openfx.sourceforge.net/Documentation/1.3/ofxProgrammingReference.html#kOfxImageEffectPropSupportsTiles
Expand Down
32 changes: 29 additions & 3 deletions Engine/RotoPaint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2727,6 +2727,22 @@ RotoPaint::onOverlayPenMotion(double time,
cursorSet = true;
}

switch (_imp->ui->selectedTool) {
case eRotoToolSolidBrush:
case eRotoToolEraserBrush:
case eRotoToolClone:
case eRotoToolReveal:
case eRotoToolBlur:
case eRotoToolSharpen:
case eRotoToolSmear:
case eRotoToolDodge:
case eRotoToolBurn: {
redraw = true; // Those tools use the overlay to draw the tool
}
default:
break;
} // switch

if ( !cursorSet && _imp->ui->showCpsBbox && (_imp->ui->state != eEventStateDraggingControlPoint) && (_imp->ui->state != eEventStateDraggingSelectedControlPoints)
&& ( _imp->ui->state != eEventStateDraggingLeftTangent) &&
( _imp->ui->state != eEventStateDraggingRightTangent) ) {
Expand All @@ -2751,8 +2767,10 @@ RotoPaint::onOverlayPenMotion(double time,
} else if (lastHoverState != eHoverStateNothing) {
newState = eHoverStateNothing;
}
redraw = _imp->ui->hoverState != newState;
_imp->ui->hoverState = newState;
if (_imp->ui->hoverState != newState) {
redraw = true;
_imp->ui->hoverState = newState;
}
}
const bool featherVisible = _imp->ui->isFeatherVisible();

Expand Down Expand Up @@ -3161,7 +3179,15 @@ RotoPaint::onOverlayPenUp(double /*time*/,
**/
setCurrentCursor(eCursorBusy);
context->evaluateNeatStrokeRender();
setCurrentCursor(eCursorDefault);
if ( context->isRotoPaint() &&
( ( _imp->ui->selectedRole == eRotoRoleMergeBrush) ||
( _imp->ui->selectedRole == eRotoRoleCloneBrush) ||
( _imp->ui->selectedRole == eRotoRolePaintBrush) ||
( _imp->ui->selectedRole == eRotoRoleEffectBrush) ) ) {
setCurrentCursor(eCursorCross);
} else {
setCurrentCursor(eCursorDefault);
}
_imp->ui->strokeBeingPaint->setStrokeFinished();
ret = true;
}
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Natron

[![GPL2 License](http://img.shields.io/:license-gpl2-blue.svg?)](https://github.com/NatronGitHub/Natron/blob/master/LICENSE.txt) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) [![Build Status](https://api.travis-ci.org/NatronGitHub/Natron.svg?branch=RB-2.4)](https://travis-ci.org/NatronGitHub/Natron) [![Coverage Status](https://coveralls.io/repos/NatronGitHub/Natron/badge.svg?branch=master)](https://coveralls.io/r/NatronGitHub/Natron?branch=master) [![Documentation Status](https://readthedocs.org/projects/natron/badge/?version=rb-2.4)](http://natron.readthedocs.io/en/rb-2.4/) [![Packaging status](https://repology.org/badge/tiny-repos/natron.svg)](https://repology.org/project/natron/badges) [![BountySource Status](https://api.bountysource.com/badge/team?team_id=271309)](https://www.bountysource.com/teams/natrongithub/issues?utm_source=Mozilla&utm_medium=shield&utm_campaign=bounties_received) [![OpenHub](https://www.openhub.net/p/natron/widgets/project_thin_badge?format=gif&ref=Thin+badge)](https://www.openhub.net/p/Natron)
[![GPL2 License](http://img.shields.io/:license-gpl2-blue.svg?)](https://github.com/NatronGitHub/Natron/blob/master/LICENSE.txt) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) [![Build Status](https://api.travis-ci.org/NatronGitHub/Natron.svg?branch=RB-2.4)](https://travis-ci.org/NatronGitHub/Natron) [![Coverage Status](https://coveralls.io/repos/NatronGitHub/Natron/badge.svg?branch=master)](https://coveralls.io/r/NatronGitHub/Natron?branch=master) [![Documentation Status](https://readthedocs.org/projects/natron/badge/?version=rb-2.4)](http://natron.readthedocs.io/en/rb-2.4/) [![Packaging status](https://repology.org/badge/tiny-repos/natron.svg)](https://repology.org/project/natron/badges) [![OpenHub](https://www.openhub.net/p/natron/widgets/project_thin_badge?format=gif&ref=Thin+badge)](https://www.openhub.net/p/Natron)

---

Expand Down Expand Up @@ -134,11 +134,11 @@ You should start contributing to the Natron project by first picking an easy tas

We coordinate development through the [GitHub issue tracker](https://github.com/NatronGitHub/Natron/issues).

The main development branch is called ["master"](https://github.com/NatronGitHub/Natron/tree/master). The stable version is on branch RB-2.4.
The main development branch is called ["master"](https://github.com/NatronGitHub/Natron/tree/master). The stable version is on branch RB-2.5.

Additionally, each stable release supported has a branch on its own. For example, the stable release of the v1.0. and all its bug fixes should go into that branch. At some point, a version that is no longer supported will get removed from GitHub's branches and only a release tag will be available to get the source code at that point.

Feel free to report bugs, discuss tasks, or pick up work there. If you want to make changes, please fork, edit, and [send us a pull request](https://github.com/NatronGitHub/Natron/pull/new/RB-2.4), preferably on the ["RB-2.4"](https://github.com/NatronGitHub/Natron/tree/RB-2.4) branch.
Feel free to report bugs, discuss tasks, or pick up work there. If you want to make changes, please fork, edit, and [send us a pull request](https://github.com/NatronGitHub/Natron/pull/new/RB-2.5), preferably on the ["RB-2.5"](https://github.com/NatronGitHub/Natron/tree/RB-2.5) branch.

There's a `.git-hooks` directory in the root. This contains a `pre-commit` hook that verifies code styling before accepting changes. You can add this to your local repository's `.git/hooks/` directory by doing the following:

Expand Down
15 changes: 9 additions & 6 deletions config-macports.pri
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
boost {
INCLUDEPATH += /opt/local/include
LIBS += -lboost_serialization-mt
BOOST_VERSION = 1.76
INCLUDEPATH += /opt/local/libexec/boost/$$BOOST_VERSION/include
LIBS += -L/opt/local/libexec/boost/$$BOOST_VERSION/lib -lboost_serialization-mt
}
equals(QT_MAJOR_VERSION, 5) {
shiboken: SHIBOKEN=shiboken2-$$PYVER
Expand All @@ -17,11 +18,13 @@ equals(QT_MAJOR_VERSION, 5) {
}

macx:openmp {
# clang 12+ is OK to build Natron, but libomp 12+ has a bug on macOS when
# lanching tasks from a background thread, see https://bugs.llvm.org/show_bug.cgi?id=50579
# libomp 12+ has a bug on macOS when lanching tasks from a background thread,
# see tools/MacPorts/lang/libomp/README.md
LIBS += -L/opt/local/lib -L/opt/local/lib/libomp -liomp5
QMAKE_CC = /opt/local/bin/clang-mp-15
QMAKE_CXX = /opt/local/bin/clang++-mp-15
# clang 17 and 18 with -fopenmp links with @rpath/libc++.1.dylib instead
# of /usr/lib/libc++.1.dylib, so let's use clang 16 for now.
QMAKE_CC = /opt/local/bin/clang-mp-16
QMAKE_CXX = /opt/local/bin/clang++-mp-16
# Recent clang cannot compile QtMac.mm
QMAKE_OBJECTIVE_CC = clang
QMAKE_OBJECTIVE_CXX = clang++
Expand Down
4 changes: 2 additions & 2 deletions tools/MINGW-packages/mingw-w64-dump_syms/PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
_realname=breakpad
pkgbase=mingw-w64-natron_dump_syms
pkgname="${MINGW_PACKAGE_PREFIX}-natron_dump_syms"
gitcommit=1a92fe4a44c954577dd678e22252848e5fc714c2
pkgver=2156.1a92fe4a
gitcommit=aa833ca824b1cd5915995bf1fb6bc377c421bd07
pkgver=2159.aa833ca8
pkgrel=1
pkgdesc="Dump win32 dwarf symbols"
arch=('any')
Expand Down
4 changes: 4 additions & 0 deletions tools/MINGW-packages/mingw-w64-imagemagick/PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ source=(
ImageMagick-6-mingw.patch
ImageMagick-6.9.11-disable-ltdl.diff
ImageMagick-6.9.10-gimp210.diff
fix-compiler-errors.patch
)
sha256sums=(
'SKIP'
Expand All @@ -50,6 +51,7 @@ sha256sums=(
'c5066995e3cc5fe81cc36b194a4a70fb2bc6ff6e5808062a09d6e767e4bd23eb'
'eb83e383f720c109b3ef7fb8c774cf108aec6ac6e71722ac5292b60feaaf3dd6'
'98f5da106e24f49fff16020ceae375c4f46108ad9a786002c1895b1c17f3dbeb'
'775b28eb46c81a243ce2eff450e3339433c993e6acf6c0340b23aac62e836dd1'
)

prepare() {
Expand All @@ -70,6 +72,8 @@ prepare() {
patch -p0 -i ${srcdir}/ImageMagick-6.9.10-gimp210.diff
fi

patch -p1 -i ${srcdir}/fix-compiler-errors.patch

# fix linker
sed -i 's#$(MAGICK_DEP_LIBS)#$(MAGICK_DEP_LIBS) -lws2_32#g' ${MCORE}/MakeFile.am

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
diff -ru a/magick/utility-private.h b/magick/utility-private.h
--- a/magick/utility-private.h 2024-05-16 16:18:24.863994300 -0700
+++ b/magick/utility-private.h 2024-05-16 16:18:57.352206600 -0700
@@ -273,7 +273,7 @@
path_wide=create_wchar_path(path);
if (path_wide == (WCHAR *) NULL)
return(-1);
- status=wstat(path_wide,attributes);
+ status=_wstati64(path_wide,attributes);
path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
return(status);
#endif

diff -ru a/magick/utility.c b/magick/utility.c
--- a/magick/utility.c 2020-05-31 09:04:03.000000000 -0700
+++ b/magick/utility.c 2024-05-17 08:05:06.523764900 -0700
@@ -67,6 +67,9 @@
#if defined(MAGICKCORE_HAVE_PROCESS_H)
#include <process.h>
#endif
+#if defined(MAGICKCORE_HAVE_GETPAGESIZE)
+int getpagesize();
+#endif
#if defined(MAGICKCORE_HAVE_MACH_O_DYLD_H)
#include <mach-o/dyld.h>
#end

diff -ru a/wand/mogrify.c b/wand/mogrify.c
--- a/wand/mogrify.c 2020-05-31 09:04:03.000000000 -0700
+++ b/wand/mogrify.c 2024-05-17 08:33:23.368934800 -0700
@@ -3983,7 +3983,7 @@
"preserve-timestamp"));
if (preserve_timestamp != MagickFalse)
{
- struct utimbuf
+ struct _utimbuf
timestamp;

timestamp.actime=properties.st_atime;
1 change: 1 addition & 0 deletions tools/MINGW-packages/mingw-w64-openimageio/PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ url="http://www.openimageio.org/"
license=("BSD-3")
depends=("${MINGW_PACKAGE_PREFIX}-boost"
"${MINGW_PACKAGE_PREFIX}-freetype"
"${MINGW_PACKAGE_PREFIX}-fmt"
"${MINGW_PACKAGE_PREFIX}-jasper"
"${MINGW_PACKAGE_PREFIX}-giflib"
"${MINGW_PACKAGE_PREFIX}-libjpeg"
Expand Down
Loading
Loading