# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 PortSystem 1.0 PortGroup active_variants 1.1 PortGroup cmake 1.1 PortGroup github 1.0 PortGroup legacysupport 1.1 # Used to provide wrappers, see below. legacysupport.newest_darwin_requires_legacy 0 github.setup Beep6581 RawTherapee 5.10 github.tarball_from releases name rawtherapee revision 1 categories graphics license GPL-3 maintainers @jasonliu-- openmaintainer homepage https://www.${name}.com description raw photo processing program long_description ${github.project} is a powerful, cross-platform \ ${description}. It is designed for developing raw \ files from a broad range of digital cameras, as \ well as HDR DNG files and non-raw image formats \ (JPEG, TIFF, and PNG). use_xz yes distname ${name}-${github.version} checksums rmd160 2147b3eab4f114d95fc7fb5dbe8d1abcb12f98cd \ sha256 a799b53cd54dba4a211479e342ffc9c5db1c44d3d6c3a27d5cc13adf0debd2da \ size 16943724 compiler.cxx_standard 2011 compiler.openmp_version 3.1 depends_build-append port:pkgconfig depends_lib-append port:adwaita-icon-theme \ path:lib/pkgconfig/cairo.pc:cairo \ path:lib/pkgconfig/cairomm-1.0.pc:cairomm-1.0 \ port:exiv2 \ port:fftw-3 \ port:fftw-3-single \ path:lib/pkgconfig/gdk-pixbuf-2.0.pc:gdk-pixbuf2 \ path:lib/pkgconfig/glib-2.0.pc:glib2 \ port:glibmm-2.4 \ path:lib/pkgconfig/gtk+-3.0.pc:gtk3 \ port:gtkmm3 \ port:lcms2 \ port:lensfun \ port:libiptcdata \ path:include/turbojpeg.h:libjpeg-turbo \ port:libpng \ path:lib/pkgconfig/librsvg-2.0.pc:librsvg \ port:libsigcxx2 \ port:tiff \ port:zlib patchfiles-append no-modified-project_source_dir.diff \ patch-config_h_in.diff # https://github.com/Beep6581/RawTherapee/commit/6b9f45c69c1ddfc3607d3d9c1206dcf1def30295 # https://trac.macports.org/ticket/69982 patchfiles-append 0001-Fix-linking-with-jpeg-turbo.patch \ 0002-removes-redundant-jpeg-error-message.patch pre-configure { if {![variant_isset quartz] && ![variant_isset x11]} { error "Either +x11 or +quartz is required" } } set app_contents ${applications_dir}/${github.project}.app/Contents configure.args-append -DBUILD_SHARED=ON \ -DOPTION_OMP=OFF if {${configure.build_arch} eq "x86_64"} { configure.args-append -DPROC_TARGET_NUMBER=1 \ -DPROC_LABEL="generic processor" } elseif {${configure.build_arch} in [list arm64 ppc ppc64]} { configure.args-append -DPROC_TARGET_NUMBER=2 } if {[variant_isset debug]} { cmake.build_type Debug configure.optflags -O0 } else { cmake.build_type RelWithDebInfo # Clear optflags for non-debug build; controlled by project configure.optflags } variant openmp description "Enable OpenMP" { # It does not work on aarch64 at the moment: # app builds, but segfaults on launch. # Unknown status on PowerPC. require_active_variants fftw-3 openmp require_active_variants fftw-3-single openmp configure.args-replace \ -DOPTION_OMP=OFF -DOPTION_OMP=ON } # No point in this on 32-bit at the moment. variant quartz conflicts x11 { supported_archs x86_64 arm64 depends_lib-append port:gtk-osx-application-gtk3 post-patch { copy ${filespath}/FindGtkMacIntegration.cmake \ ${worksrcpath}/cmake/modules/ reinplace {s/MacIntegration/GtkMacIntegration/} \ ${worksrcpath}/rtgui/CMakeLists.txt } configure.args-append \ -DBUNDLE_BASE_INSTALL_DIR=$app_contents/MacOS \ -DDATADIR=$app_contents/Resources \ -DLIBDIR=$app_contents/Frameworks require_active_variants gtk3 quartz require_active_variants gtkmm3 quartz } variant x11 conflicts quartz { legacysupport.redirect_bins rawtherapee rawtherapee-cli configure.args-append \ -DDATADIR=${prefix}/share/${name} \ -DMACOS_NATIVE=OFF require_active_variants gtk3 x11 require_active_variants gtkmm3 x11 patchfiles-append 0001-Do-not-force-Cocoa-build.patch \ 0002-Allow-non-Cocoa-code-in-sources.patch \ 0003-patch-options.cc.diff post-patch { reinplace "s|@PREFIX@|${prefix}|" ${worksrcpath}/rtgui/options.cc } # Having wasted many hours on this silly issue, I think it makes # sense to display a warning which may save someone's time and sanity. notes " On the first run the app expects a user to confirm the launch\ in a modal window. Some versions of X server may display that window\ beneath the main one. Interface controls will not respond until\ the modal window is closed. If you find yourself in such a situation,\ move the main X window aside. " } # See: https://github.com/Beep6581/RawTherapee/issues/7052 if {${configure.build_arch} in [list i386 ppc]} { patchfiles-append 0004-Revert-breaking-commit-as-a-temporary-fix.patch } if {${configure.build_arch} in [list ppc ppc64]} { # https://github.com/Beep6581/RawTherapee/pull/7051 patchfiles-append 0005-Fix-PowerPC-processor-target.patch # It is off by default, but just in case. # We do not want LTO on PowerPC builds. configure.args-append \ -DWITH_LTO=OFF } # +quartz requires non-default variants of its dependencies, # so it will be broken on buildbots. if {![variant_isset quartz]} { default_variants-append +x11 } if {${configure.build_arch} ni [list i386 ppc ppc64] \ && ![variant_isset quartz]} { notes-append " Consider installing ${name} with macOS native interface:\ sudo port upgrade ${name} -x11 +quartz.\ It may offer a better user experience. " } post-destroot { # The following steps somewhat mimic certain parts of the # ${worksrcpath}/tools/osx/macosx_bundle.sh script. However, we only # selectively perform some of the steps from the upstream-provided # script because the 'macosx_bundle.sh' script performs many # undesirable actions, such as actually copying ALL of RawTherapee's # dependencies' library files directly into the .app bundle, and # then using install_name_tool to retroactively modify the @rpaths # in the binary executable to point to these local copies of dylibs. # In addition, their script also packs the .app bundle into a DMG, # so it's pretty safe to assume that their script is meant to be # used to generate a fully portable installer for distribution. # XDG = X Desktop Group, now known as freedesktop.org # Technically, we can build app bundle with gtk+x11, # but that would complicate making wrappers for libstdc++ systems, # while perhaps all users of modern macOS will use +quartz anyway. if {[variant_isset quartz]} { set xdg_share_root ${destroot}${prefix}/share set rt_data_home $xdg_share_root/${name} ln -s $app_contents/Resources $rt_data_home set xdg_desktop_entries $xdg_share_root/applications xinstall -d $xdg_desktop_entries ln -s $app_contents/Resources/applications/${name}.desktop \ $xdg_desktop_entries/ set xdg_desktop_icons $xdg_share_root/icons/hicolor xinstall -d $xdg_desktop_icons set icon_resolutions [list \ 16x16 24x24 32x32 48x48 64x64 128x128 256x256 scalable \ ] foreach ico_res $icon_resolutions { xinstall -d $xdg_desktop_icons/$ico_res/apps ln -s $app_contents/Resources/icons/hicolor/$ico_res/apps/${name}.png \ $xdg_desktop_icons/$ico_res/apps/ } set xdg_metainfo $xdg_share_root/metainfo xinstall -d $xdg_metainfo ln -s $app_contents/Resources/metainfo/com.${name}.${github.project}.appdata.xml \ $xdg_metainfo/ set relative_manpath man/man1 ln -s $app_contents/Resources/$relative_manpath/${name}.1 \ $xdg_share_root/$relative_manpath/ set osx_tools ${worksrcpath}/tools/osx copy $osx_tools/PkgInfo ${destroot}$app_contents/ # We overwrite the Info.plist file generated by the CMake build # with the one provided in the RawTherapee source code, because the # one provided by the devs is more complete than the one generated # during the course of the build. xinstall -m 644 $osx_tools/Info.plist.in \ ${destroot}$app_contents/Info.plist set regexes [list \ "s/@minimum_arm64_version@/11.0/" \ "s/@minimum_x86_64_version@/10.6/" \ "s/@version@/${version}/" \ "s/@shortVersion@/${version}/" \ "/XDG_CONFIG_HOME/,/XDG_DATA_DIRS/s|\(\).*\(\)|\\1${prefix}/share/${name}\\2|" \ "/XDG_DATA_HOME/,/GSETTINGS_SCHEMA_DIR/s|\(\).*\(\)|\\1${prefix}/share/${name}\\2|" \ "s|/Applications/${github.project}.app/Contents/Resources|${prefix}|" \ "/GDK_PIXBUF_MODULEDIR/,/LIBDIR/s|\(\).*\(\)|\\1${prefix}/lib/gdk-pixbuf-2.0/2.10.0/loaders\\2|" \ "/DATADIR/,/GDK_RENDERING/s|${prefix}|$app_contents/Resources|" \ ] foreach re $regexes { reinplace -E $re ${destroot}$app_contents/Info.plist } # Copy the .icns files into the app bundle set icns_files [list ${name} profile] foreach icns_file $icns_files { copy $osx_tools/${icns_file}.icns \ ${destroot}$app_contents/Resources/ } ln -s $app_contents/MacOS/${name} ${destroot}${prefix}/bin/ ln -s $app_contents/MacOS/${name}-cli ${destroot}${prefix}/bin/ } } proc update_desktop_env {} { global prefix if {![catch {registry_active desktop-file-utils}]} { system [join [list \ ${prefix}/bin/update-desktop-database \ ${prefix}/share/applications \ ] " "] } system [join [list \ ${prefix}/bin/glib-compile-schemas \ ${prefix}/share/glib-2.0/schemas \ ] " "] if {![catch {registry_active shared-mime-info}]} { system [join [list \ "env XDG_DATA_DIRS=${prefix}/share" \ "${prefix}/bin/update-mime-database -V ${prefix}/share/mime" \ ] " "] } } post-activate { update_desktop_env } post-deactivate { update_desktop_env } variant tcmalloc \ description {Use Google's TCMalloc library for memory allocation} \ { depends_lib-append port:gperftools configure.args-append -DENABLE_TCMALLOC=ON } # Exclude beta/rc releases from livecheck github.livecheck.regex {([0-9\.]+)}