Files

773 lines
29 KiB
Tcl

#-*- 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 compilers 1.0
PortGroup muniversal 1.0
PortGroup legacysupport 1.1
PortGroup linear_algebra 1.0
name octave
version 11.3.0
# package_version has to be kept in sync with the octave PortGroup
set package_version 11.x.x
revision 1
categories math science
license GPL-3+
maintainers {mcalhoun @MarcusCalhoun-Lopez} {mps @Schamschula} openmaintainer
description a high-level language for numerical computations
long_description \
GNU Octave is a high-level language, primarily intended for numerical \
computations. It provides a convenient command-line interface for \
solving linear and nonlinear problems numerically.
homepage https://www.gnu.org/software/octave
master_sites gnu:octave
checksums rmd160 55e9c3e9f9d979513aa817d299be98fd30a005b8 \
sha256 cb589feb3cef84d134854683718c9c13e0b471ea916d0761be7a8c4e261a32d1 \
size 38355667
# see https://octave.discourse.group/t/octave-11-3-0-released/7568
# remove for next version update
depends_build-append \
port:coreutils
post-extract {
# Set correct date in files that haven't been generated correctly.
reinplace "s|UPDATED\ 2\ June\ 2026|UPDATED 1 June 2026|" ${worksrcpath}/doc/interpreter/version-octave.texi
reinplace "s|UPDATED\ 2\ June\ 2026|UPDATED 1 June 2026|" ${worksrcpath}/doc/interpreter/octave-doc-version.texi
reinplace "s|UPDATED\ 2\ June\ 2026|UPDATED 1 June 2026|" ${worksrcpath}/doc/liboctave/version-liboctave.texi
# Re-set to original modification date and time to avoid triggering a doc rebuild.
exec gtouch -d "2026-06-01 19:12:14 UTC" ${worksrcpath}/doc/interpreter/version-octave.texi
exec gtouch -d "2026-06-01 19:12:14 UTC" ${worksrcpath}/doc/interpreter/octave-doc-version.texi
exec gtouch -d "2026-06-01 19:12:14 UTC" ${worksrcpath}/doc/liboctave/version-liboctave.texi
}
# see https://lists.gnu.org/archive/html/octave-maintainers/2016-05/msg00286.html
compiler.cxx_standard \
2017
# if there is an error bulding octave package, avoid
# error: structure has no member 'dir'
patchfiles-append patch-better_error.diff
# bsdtar and tar have different outputs
# starting in Mac OS X Snow Leopard (10.6), tar is an alias of bsdtar
# this patch breaks packages builds on 10.6 ppc, so exclude it there
if { ${os.platform} eq "darwin" && ${os.major} >= 10 && ${os.arch} ne "powerpc" } {
patchfiles-append patch-bsdtar.diff
}
# facilitate universal builds of packages
patchfiles-append patch-configure_make.m.diff
# see https://octave.discourse.group/t/rpath-issues-with-octave-executables-with-macports/6342/30
patchfiles-append patch-configure_rpath.diff
if {${os.platform} eq "darwin"} {
post-patch {
reinplace "s|%PREFIX%|${prefix}|" \
${worksrcpath}/configure.ac
}
}
# allow mkoctfile to recognize and pass along -arch compiler switch
patchfiles-append patch-arch_arg.diff
# see https://savannah.gnu.org/bugs/?50025
# fails to apply: patchfiles-append patch-crash_on_exit.diff
# octave compiles in the hostname value
# it is used to determine installation locations
# of architecture-dependent package files
# this means the build is dependent on the minor number of the OS
# the following patch attempts to prevent this
patchfiles-append patch-versions.diff
# reports of `__opengl_info__` not working the first time
patchfiles-append patch-__opengl_info__.diff
# see https://trac.macports.org/ticket/57288
patchfiles-append patch-run-octave.diff
# see https://savannah.gnu.org/patch/index.php?9806
set java_version 1.8
patchfiles-append patch-java_version.diff
post-patch {
reinplace \
"s|__MACPORTS_JAVA_VERSION__|${java_version}|g" \
${worksrcpath}/Makefile.in
}
# https://trac.macports.org/ticket/69575
legacysupport.redirect_bins mkoctfile-${version} octave-${version} octave-cli-${version} octave-config-${version}
if {${os.platform} eq "darwin" && ${configure.cxx_stdlib} ne "libc++"} {
# Patch the script which runs at destroot:
patchfiles-append patch-run-octave-libstdcpp.diff
post-patch {
reinplace "s|%PREFIX%|${prefix}|" ${worksrcpath}/run-octave.in
}
# Patch scripts installed by LegacySupport so that they call correct binaries.
post-activate {
foreach obin {mkoctfile octave octave-cli octave-config} {
reinplace "s|\"\${0}-orig\"|$obin-${version}-orig|" \
${prefix}/bin/${obin}-${version}
}
}
}
post-patch {
platform darwin {
# Keep ppc before i386, so that Rosetta builds for ppc.
# Also, use build_arch and not sysctl:
# https://trac.macports.org/ticket/69573
if { ${configure.build_arch} eq "arm64" } {
set short_host_name aarch64-apple-${os.platform}${os.major}.x.x
} elseif { ${configure.build_arch} eq "ppc" } {
set short_host_name powerpc-apple-${os.platform}${os.major}.x.x
} elseif { ${configure.build_arch} eq "ppc64" } {
set short_host_name powerpc64-apple-${os.platform}${os.major}.x.x
} elseif { ${os.arch} eq "i386" } {
if { ${os.major} >= 9 && [sysctl hw.cpu64bit_capable] == 1 } {
set short_host_name x86_64-apple-${os.platform}${os.major}.x.x
} else {
set short_host_name i686-apple-${os.platform}${os.major}.x.x
}
}
}
reinplace \
"s|__MACPORTS_canonical_host_type__|${short_host_name}|g" \
configure \
build-aux/subst-config-vals.in.sh
}
use_autoreconf yes
autoreconf.args --install --verbose --force
pre-configure {
# see https://trac.macports.org/ticket/51707
set fc_full [lindex [split ${configure.fc} /] end]
set fc [lindex [split ${fc_full} -] 0]
switch ${fc} {
gfortran {
set fcv [lindex [split ${fc_full} -] end]
set gccdir gcc[join [split ${fcv} .] ""]
if {[file exists ${prefix}/lib/${gccdir}/libquadmath.dylib]} {
configure.args-append FLIBS="-L${prefix}/lib/${gccdir} -lgfortran -lquadmath -lm"
} else {
configure.args-append FLIBS="-L${prefix}/lib/${gccdir} -lgfortran -lm"
}
}
g95 {
configure.args-append FLIBS="-L${prefix}/lib -lf95 -lm"
}
default {
ui_warn "Unknown Fortran compiler: ${configure.fc}"
}
}
}
# Some older versions of CLANG do not honor the CPATH
# environment variables, which is required for compiling this port
# when using MacPorts. The versions seem to be: MacPorts CLANG 2.9 or
# earlier, and Apple CLANG 318.0.58 or older.
# see https://bugs.llvm.org/show_bug.cgi?id=8971
# see https://trac.macports.org/ticket/40250
#
# Clang must be able to use cstdint.
# see https://trac.macports.org/ticket/53044
#
# Clang must be able to handle VLA extension.
# see https://clang.llvm.org/compatibility.html#vla
# see https://trac.macports.org/ticket/57270
#
compiler.blacklist-append {clang <= 802}
# see see https://trac.macports.org/ticket/53044
compiler.blacklist-append {*gcc-4.6}
configure.checks.implicit_function_declaration.whitelist-append strchr unreachable
# see https://wiki.octave.org/Building for a list of dependencies
# avoid depends_build-append path:libexec/coreutils/libstdbuf.so:coreutils
configure.env-append "MKDIR_P=/bin/mkdir -p"
# see https://trac.macports.org/ticket/57850
configure.env-append "INSTALL_DATA=\${INSTALL} -m 644 -p"
if { ${os.platform} eq "darwin" && ${os.major} > 10 } {
# avoid depends_build-append port:cctools
configure.env-append RANLIB=/usr/bin/ranlib
} else {
# ranlib on older systems is too old to handle newer clang output
# https://trac.macports.org/ticket/54228
depends_build-append port:cctools
configure.env-append RANLIB=${prefix}/bin/ranlib
}
# main octave port lists as a depends_lib
# configure.ac list it among the "[p]rograms used in Makefiles"
depends_build-append port:gawk
configure.awk ${prefix}/bin/gawk
# octave does not depend directly on openssl, but it
# is brought in by many of the other dependencies
#
# openssl's libraries are never linked into octave
# openssl's header files are never included
# the openssl part of Qt is never used
#
# similarly for libpaper
#
# see https://lists.macports.org/pipermail/macports-dev/2016-December/035032.html
#
license_noconflict \
openssl \
openssl11 \
libpaper
# main octave port lists as a depends_lib
# configure.ac list it among the "[p]rograms used in Makefiles"
depends_build-append port:grep
configure.env-append GREP=${prefix}/bin/ggrep
configure.env-append EGREP=${prefix}/bin/gegrep
configure.env-append FGREP=${prefix}/bin/gfgrep
# configure.ac list it among the "[p]rograms used in Makefiles"
depends_build-append path:libexec/gnubin/find:findutils
configure.env-append FIND=${prefix}/bin/gfind
# main octave port lists as a depends_lib
# configure.ac list it among the "[p]rograms used in Makefiles"
depends_build-append port:gsed
configure.env-append SED=${prefix}/bin/gsed
depends_build-append port:flex
configure.env-append LEX=${prefix}/bin/flex
depends_build-append port:bison
configure.env-append "YACC=${prefix}/bin/bison -y"
depends_build-append port:gperf
configure.env-append GPERF=/usr/bin/gperf
# configure.ac list it among the "[p]rograms used in Makefiles"
depends_build-append port:perl5
configure.perl ${prefix}/bin/perl5
# avoid depends_build-append port:desktop-file-utils
#configure.env-append DESKTOP_FILE_INSTALL=""
configure.env-append ac_cv_prog_DESKTOP_FILE_INSTALL=""
depends_build-append \
port:pkgconfig
compilers.choose fc f77 f90 cc cxx
# GCC 6 fails in several ways
# in order to use the Carbon framework, -fpermissive is required
# GCC does not understand Xcode's use of __attribute__
# see https://trac.macports.org/ticket/53021
# as of Octave 4.4, GCC 6 also fails with
# error: call of overloaded 'abs(signed char)' is ambiguous
# see https://lists.gnu.org/archive/html/octave-maintainers/2016-02/msg00168.html
compiler.blacklist-append macports-gcc-6
# for now, limit the number of variants
# some of these compilers may work fine
compilers.setup \
require_fortran \
-gcc6 \
-gcc5 \
-gcc49 \
-gcc48 \
-gcc47 \
-gcc46 \
-gcc45 \
-gcc44 \
-clang34 \
-clang33
#configure.args-append --with-shell=???
configure.args-append \
--with-framework-carbon \
--without-x \
--enable-static
configure.args-append \
--disable-openmp
configure.args-append \
--disable-java \
--without-qt \
--without-fltk \
--without-opengl \
--without-sndfile \
--without-portaudio \
--without-magick \
--disable-docs
configure.args-append --disable-silent-rules
# avoid
# Undefined symbols for architecture x86_64:
# "print_usage()", referenced from: ...
configure.args-append \
--enable-link-all-dependencies
# in configure.ac, listed as one of "[p]rograms used when running Octave"
depends_lib-append port:python314
configure.python ${prefix}/bin/python3.14
# in configure.ac, listed as one of "[p]rograms used when running Octave"
depends_lib-append port:ghostscript
configure.env-append GHOSTSCRIPT=${prefix}/bin/gs
# in configure.ac, listed as one of "[p]rograms used when running Octave"
depends_lib-append port:gnuplot
configure.env-append GNUPLOT=${prefix}/bin/gnuplot
# in configure.ac, listed as one of "[p]rograms used when running Octave"
depends_lib-append port:less
configure.env-append DEFAULT_PAGER=${prefix}/bin/less
depends_lib-append port:fast-float
depends_lib-append port:ncurses
depends_lib-append port:readline
depends_lib-append port:pcre
#--without-amd
#--without-camd
#--without-colamd
#--without-cholmod
#--without-cxsparse
#--without-umfpack
depends_lib-append \
port:SuiteSparse_config \
port:SuiteSparse_AMD \
port:SuiteSparse_CAMD \
port:SuiteSparse_COLAMD \
port:SuiteSparse_CHOLMOD \
port:SuiteSparse_CXSparse \
port:SuiteSparse_SPQR \
port:SuiteSparse_UMFPACK
foreach lib {amd camd colamd cholmod cxsparse umfpack} {
configure.args-append \
--with-${lib}="-l${lib} -lsuitesparseconfig"
}
#--without-qhull
depends_lib-append port:qhull
#--without-z
depends_lib-append port:zlib
#--without-hdf5
depends_lib-append port:hdf5
configure.args-append \
--with-hdf5-includedir=${prefix}/include \
--with-hdf5-libdir=${prefix}/lib
# avoid configure error
# fatal error: 'mpi.h' file not found
# see https://github.com/macports/macports-ports/pull/1865
# for a discussion
# UPD. 2024.03. No longer an issue, apparently:
# https://trac.macports.org/ticket/69574
# foreach mpi {mpich mpich_devel openmpi openmpi_devel} {
# require_active_variants hdf5 "" ${mpi}
# }
#--disable-fftw-threads
#--without-fftw3
#--without-fftw3f
depends_lib-append port:fftw-3
depends_lib-append port:fftw-3-single
#--without-glpk
depends_lib-append port:glpk
#--without-curl
depends_lib-append port:curl
#--without-qrupdate
depends_lib-append port:qrupdate
#--without-arpack
depends_lib-append port:arpack
# see https://lists.gnu.org/archive/html/help-octave/2016-08/msg00066.html
configure.args-append --without-openssl
#depends_lib-append path:lib/libssl.dylib:openssl
#--disable-rapidjson
depends_lib-append path:lib/pkgconfig/RapidJSON.pc:rapidjson
# see https://trac.macports.org/ticket/56989
configure.args-append \
--without-sundials_nvecserial \
--without-sundials_ida \
--without-sundials_sunlinsolklu \
--without-sundials_core
variant sundials description {enable sundials support for solving ODEs} {
set sundials_ver 6
set sundials_base ${prefix}/libexec/sundials${sundials_ver}
set sundials_include ${sundials_base}/include
set sundials_lib ${sundials_base}/lib
configure.env-append "CXXFLAGS=-std=gnu++17"
depends_lib-append \
port:sundials${sundials_ver}
compiler.cpath-append \
${sundials_include}
compiler.library_path-append \
${sundials_lib}
configure.args-delete \
--without-sundials_nvecserial \
--without-sundials_ida \
--without-sundials_sunlinsolklu
configure.args-append \
--with-sundials_ida-includedir=${sundials_include} \
--with-sundials_ida-libdir=${sundials_lib} \
--with-sundials_nvecserial-includedir=${sundials_include} \
--with-sundials_nvecserial-libdir=${sundials_lib} \
--with-sundials_sunlinsolklu-includedir=${sundials_include} \
--with-sundials_sunlinsolklu-libdir=${sundials_lib}
}
default_variants-append +sundials
# see etc/README.MacOS
depends_run-append \
port:epstool \
port:ghostscript \
port:fig2dev \
port:pstoedit
# see https://savannah.gnu.org/bugs/?53473
depends_run-append \
port:texinfo
patchfiles-append patch-makeinfo.diff
post-patch {
reinplace \
"s|__MACPORTS_prefix__|${prefix}|g" \
libinterp/corefcn/help.h
}
pre-configure {
configure.args-append --with-blas="-L${prefix}/lib ${linalglib}" --with-lapack=""
}
variant java description {enable Java interface} {
PortGroup java 1.0
configure.args-replace --disable-java --enable-java
java.version ${java_version}+
}
# java variant seems to cause problems for both users and build bots
# https://lists.macosforge.org/pipermail/macports-users/2016-May/thread.html#41052
# https://trac.macports.org/ticket/51480
#default_variants-append +java
variant qt5 description {build the GUI using Qt5} {
PortGroup qt5 1.0
qt5.depends_component qttools sqlite-plugin
depends_lib-append port:qscintilla-qt5
# location of libqscintilla2.dylib
configure.ldflags-append \
-L${qt_libs_dir}
configure.args-replace --without-qt --with-qt=5
configure.env-append PATH=${qt_dir}/bin:$env(PATH)
build.env-append PATH=${qt_dir}/bin:$env(PATH)
destroot.env-append PATH=${qt_dir}/bin:$env(PATH)
test.env-append PATH=${qt_dir}/bin:$env(PATH)
}
if { ![variant_isset qt5] } {
# Cutoff for default values
# macOS 10.7 - last OS supported by Qt 4
# see http://doc.qt.io/qt-4.8/supported-platforms.html
# macOS 10.10 - oldest OS supported by the current long-term support version of Qt 5 (Qt 5.9).
# see http://web.archive.org/web/20170702143426/https://doc.qt.io/qt-5/supported-platforms-and-configurations.html
# macOS 10.11 - oldest OS supported for qscintilla-qt5, as of 2022-09-21
if {${os.major} >= 15 || ${os.platform} ne "darwin"} {
default_variants-append +qt5
}
}
variant fltk description {enable fltk as a graphics toolkit for plotting} {
depends_lib-append path:lib/libfltk.dylib:fltk
configure.args-replace --without-fltk --with-fltk
}
# see https://github.com/macports/macports-ports/pull/1865 for a discussion on fltk
#default_variants-append +fltk
if {[variant_isset fltk] || [variant_isset qt5]} {
# native_graphics (fltk) and gui (Qt) require OpenGL and font and printing capabilities
depends_lib-append \
port:fontconfig \
port:freetype \
port:gl2ps
configure.args-replace --without-opengl --with-framework-opengl
}
if { [variant_isset fltk] && [variant_isset qt5] } {
notes-append "unless octave is run with --no-gui-libs, graphics_toolkit(\"fltk\") will cause a crash"
}
variant sound description {enable audio support (file I/O and playback)} {
depends_lib-append port:libsndfile
depends_lib-append port:portaudio
configure.args-replace --without-sndfile --with-sndfile
configure.args-replace --without-portaudio --with-portaudio
}
default_variants-append +sound
variant app description "build application bundle to launch ${subport}" {
if {[vercmp ${xcodeversion} 4.5] < 0} {
# need a way to generate icns file for Xcode prior to 4.5
# see http://trac.macports.org/ticket/51487
depends_build-append port:libicns
}
global appName
set appName Octave.app
post-build {
xinstall -d -m 0755 ${worksrcpath}/${appName}/Contents
xinstall -d -m 0755 ${worksrcpath}/${appName}/Contents/Resources
xinstall -d -m 0755 ${worksrcpath}/${appName}/Contents/MacOS
set script [open "${worksrcpath}/${appName}/Contents/MacOS/Octave" w 0755]
if { [variant_isset qt5] } {
puts ${script} "#!/bin/sh"
puts ${script} ""
puts ${script} "${prefix}/bin/octave-${version} --gui \"\$@\""
} else {
puts ${script} "#!/usr/bin/osascript"
puts ${script} ""
puts ${script} "tell application \"Terminal\" to do script \"${prefix}/bin/octave-${version} --no-gui-libs; exit\""
}
close ${script}
# LSArchitecturePriority is only defined for i386, x86_64 and arm64[e]
# defining is as arm64 prevents an unneeded install of Rosetta 2
if { ![variant_isset universal] && ${configure.build_arch} ne "ppc" && ${configure.build_arch} ne "ppc64" } {
set values "
CFBundleDevelopmentRegion string English
CFBundleExecutable string Octave
CFBundleIconFile string Octave.icns
CFBundleIdentifier string org.octave.Octave
CFBundleInfoDictionaryVersion string 6.0
CFBundleSignature string Octave
CFBundleVersion string ${version}
CFBundleShortVersionString string ${version}
CFBundleDocumentTypes array {}
CFBundleDocumentTypes: dict {}
CFBundleDocumentTypes:0:CFBundleTypeRole string \"Editor\"
CFBundleDocumentTypes:0:CFBundleTypeExtensions array {}
CFBundleDocumentTypes:0:CFBundleTypeExtensions: string \"m\"
CFBundleDocumentTypes:0:CFBundleTypeOSTypes array {}
CFBundleDocumentTypes:0:CFBundleTypeOSTypes: string \"Mfile\"
CFBundleName string Octave
CFBundlePackageType string APPL
LSArchitecturePriority array {}
LSArchitecturePriority: string ${configure.build_arch}
NSPrincipalClass string NSApplication
"
} else {
set values "
CFBundleDevelopmentRegion string English
CFBundleExecutable string Octave
CFBundleIconFile string Octave.icns
CFBundleIdentifier string org.octave.Octave
CFBundleInfoDictionaryVersion string 6.0
CFBundleSignature string Octave
CFBundleVersion string ${version}
CFBundleShortVersionString string ${version}
CFBundleDocumentTypes array {}
CFBundleDocumentTypes: dict {}
CFBundleDocumentTypes:0:CFBundleTypeRole string \"Editor\"
CFBundleDocumentTypes:0:CFBundleTypeExtensions array {}
CFBundleDocumentTypes:0:CFBundleTypeExtensions: string \"m\"
CFBundleDocumentTypes:0:CFBundleTypeOSTypes array {}
CFBundleDocumentTypes:0:CFBundleTypeOSTypes: string \"Mfile\"
CFBundleName string Octave
CFBundlePackageType string APPL
NSPrincipalClass string NSApplication
"
}
foreach {key type value} ${values} {
system -W "${worksrcpath}/${appName}/Contents" "/usr/libexec/PlistBuddy -c \"Add :${key} ${type} ${value}\" Info.plist"
}
# have Info.plist be human readable
system "/usr/bin/plutil -convert xml1 ${worksrcpath}/${appName}/Contents/Info.plist"
# conversion by plutil set verys limited permissions
system "/bin/chmod 0644 ${worksrcpath}/${appName}/Contents/Info.plist"
xinstall -d -m 0755 ${worksrcpath}/Octave.iconset
foreach res {16 32 128 256 512} {
set hres [expr 2*${res}]
copy ${worksrcpath}/etc/icons/octave-logo-${res}.png ${worksrcpath}/Octave.iconset/icon_${res}x${res}.png
copy ${worksrcpath}/etc/icons/octave-logo-${hres}.png ${worksrcpath}/Octave.iconset/icon_${res}x${res}@2x.png
}
if {[vercmp ${xcodeversion} 4.5] >= 0} {
system -W ${worksrcpath} "/usr/bin/iconutil -c icns -o ${appName}/Contents/Resources/Octave.icns Octave.iconset"
} else {
# /usr/bin/iconutil introduced in Xcode 4.5
# see http://trac.macports.org/ticket/51487
system -W ${worksrcpath}/Octave.iconset \
"${prefix}/bin/png2icns ${worksrcpath}/${appName}/Contents/Resources/Octave.icns icon_16x16.png icon_32x32.png icon_128x128.png icon_256x256.png icon_512x512.png"
}
}
post-destroot {
copy ${worksrcpath}/${appName} ${destroot}${applications_dir}
}
}
if { [variant_isset qt5] } {
default_variants-append +app
}
# the qt gui uses a few Objective-C calls, and for some reason
# libobjc.dylib is not being automatically linked in on older systems
if { [variant_isset qt5] } {
if { ${os.platform} eq "darwin" && ${os.major} < 18 } {
configure.ldflags-append -lobjc
}
}
variant docs description {build documentation files} {
depends_build-append port:texinfo
configure.env-append \
MAKEINFO=${prefix}/bin/makeinfo \
TEXI2DVI=${prefix}/bin/texi2dvi \
TEXI2PDF=${prefix}/bin/texi2pdf
# see https://lists.macosforge.org/pipermail/macports-dev/2016-January/032293.html
depends_build-append \
port:texlive-basic \
port:texlive-latex
# see https://trac.macports.org/ticket/51132
depends_build-append \
port:texlive-fonts-recommended
configure.args-replace --disable-docs --enable-docs
# octave bundles an older texinfo.tex; replace it with the MacPorts version
# to avoid float cross-reference failures with TeX Live 2026
post-patch {
copy -force ${prefix}/share/texmf/tex/texinfo/texinfo.tex \
${worksrcpath}/build-aux/texinfo.tex
}
}
default_variants-append +docs
# GraphicsMagick and octave need to be built with the same C++ standard library
# or else undefined symbols:
# "Magick::Image::ping(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)"
set magickConflict {}
set magickDefault yes
if {${configure.cxx_stdlib} eq "libc++"} {
foreach gccVar ${compilers.gcc_variants} {
if {[variant_exists ${gccVar}] } {
set varPort [fortran_depends_port_name ${gccVar}]
lappend magickConflict ${varPort}
if {[variant_isset ${gccVar}] } {
set magickDefault no
}
}
}
}
variant graphicsmagick description {use GraphicsMagick for image I/O} conflicts {*}${magickConflict} {
depends_lib-append port:GraphicsMagick
configure.args-replace --without-magick --with-magick=GraphicsMagick++
}
if {${magickDefault}} {
default_variants-append +graphicsmagick
}
post-destroot {
# put any startup commands in ${destroot}${prefix}/share/octave/${version}/m/startup/octaverc
# see https://www.gnu.org/software/octave/doc/interpreter/Startup-Files.html
file delete ${destroot}${prefix}/share/octave/site/m/startup/octaverc
if {[file exists ${worksrcpath}/liboctave/operators/libcxx-fix.h]} {
# install the libc++ fix, no matter if used or not, since it is
# required for projects including these headers.
xinstall -m 644 ${worksrcpath}/liboctave/operators/libcxx-fix.h \
${destroot}${prefix}/include/${name}-${version}/${name}/libcxx-fix.h
}
# do not force upgrade of every dependency every time the version changes
foreach lib {liboctave.dylib liboctinterp.dylib} {
xinstall -d -m 0755 ${destroot}${prefix}/lib/octave/${package_version}
ln -s ../${version}/${lib} ${destroot}${prefix}/lib/octave/${package_version}/${lib}
system "install_name_tool -id ${prefix}/lib/octave/${package_version}/${lib} ${destroot}${prefix}/lib/octave/${version}/${lib}"
}
if { [variant_isset qt5] } {
# do not force upgrade of every dependency every time the version changes
foreach lib {liboctgui.dylib} {
xinstall -d -m 0755 ${destroot}${prefix}/lib/octave/${package_version}
ln -s ../${version}/${lib} ${destroot}${prefix}/lib/octave/${package_version}/${lib}
system "install_name_tool -id ${prefix}/lib/octave/${package_version}/${lib} ${destroot}${prefix}/lib/octave/${version}/${lib}"
}
}
}
# generate default octave_packages file so that it is removed if Octave is uninstalled
if {!${universal_possible} || ![variant_isset universal]} {
post-destroot {
set octave_install_share ${destroot}${prefix}/share/octave/packages
set octave_install_lib ${destroot}${prefix}/lib/octave/packages
set octave_packages_file ${destroot}${prefix}/share/octave/octave_packages
system -W ${worksrcpath} \
"./run-octave -cli -q -f -H --eval 'try; pkg prefix ${octave_install_share} ${octave_install_lib}; pkg global_list ${octave_packages_file}; pkg -verbose -global rebuild; disp(lasterror.message); catch; exit(1); end_try_catch;'"
}
} else {
merger-post-destroot {
foreach arch ${universal_archs_to_use} {
set octave_install_share ${destroot}-${arch}${prefix}/share/octave/packages
set octave_install_lib ${destroot}-${arch}${prefix}/lib/octave/packages
set octave_packages_file ${destroot}-${arch}${prefix}/share/octave/octave_packages
system -W ${worksrcpath}-${arch} \
"./run-octave -cli -q -f -H --eval 'try; pkg prefix ${octave_install_share} ${octave_install_lib}; pkg global_list ${octave_packages_file}; pkg -verbose -global rebuild; disp(lasterror.message); catch; exit(1); end_try_catch;'"
}
}
}
# avoid warnings about generated directories
destroot.keepdirs-append ${destroot}${prefix}/share/octave/packages
destroot.keepdirs-append ${destroot}${prefix}/lib/octave/packages
# unless octave_packages file is regenerated, then installed Octave packages
# will NOT be recognized whenever Octave is upgraded
post-activate {
set octave_install_share ${prefix}/share/octave/packages
set octave_install_lib ${prefix}/lib/octave/packages
system "${prefix}/bin/octave-cli -q -f -H --eval 'try; pkg prefix ${octave_install_share} ${octave_install_lib}; pkg -verbose -global rebuild; disp(lasterror.message); catch; exit(1); end_try_catch;'"
}
test.run yes
test.target check