summaryrefslogtreecommitdiff
path: root/sci-libs/plplot
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2020-01-15 15:51:32 +0000
committerV3n3RiX <venerix@redcorelinux.org>2020-01-15 15:51:32 +0000
commit21435953e16cda318a82334ddbadb3b5c36d9ea7 (patch)
treee1810a4b135afce04b34862ef0fab2bfaeb8aeca /sci-libs/plplot
parent7bc9c63c9da678a7e6fceb095d56c634afd22c56 (diff)
gentoo resync : 15.01.2020
Diffstat (limited to 'sci-libs/plplot')
-rw-r--r--sci-libs/plplot/Manifest8
-rw-r--r--sci-libs/plplot/files/plplot-5.12.0-safe-string.patch20
-rw-r--r--sci-libs/plplot/files/plplot-5.15.0-ieee.patch19
-rw-r--r--sci-libs/plplot/files/plplot-5.15.0-multiarch.patch56
-rw-r--r--sci-libs/plplot/files/plplot-5.15.0-ocaml-rpath.patch166
-rw-r--r--sci-libs/plplot/files/plplot-5.15.0-ocaml.patch43
-rw-r--r--sci-libs/plplot/files/replace-gdc-extensions.patch434
-rw-r--r--sci-libs/plplot/plplot-5.15.0.ebuild288
8 files changed, 1034 insertions, 0 deletions
diff --git a/sci-libs/plplot/Manifest b/sci-libs/plplot/Manifest
index 9391b2af4b95..6a789d0ffade 100644
--- a/sci-libs/plplot/Manifest
+++ b/sci-libs/plplot/Manifest
@@ -2,7 +2,15 @@ AUX plplot-5.11.0-octave.patch 669 BLAKE2B 43361aa8c31f6b743b1a6d20b27701655ab4d
AUX plplot-5.12.0-java-install-path.patch 393 BLAKE2B bd6860e694b5132a349699e25b79951308001b04b49d4ac1f070cd2ce51dc1e6ea76a7721e925c123669beb981ba756c3ae4e29bc0dee6f85f4e44fb61ac5f91 SHA512 0e87a67fd6821be07a56b68d8f9c23e4c25efea4fc9b56a2cec06d804202946917abd58271c71674d6b3b3ecda688be44920649095da3b125fe3a119fd22f1dd
AUX plplot-5.12.0-multiarch.patch 1309 BLAKE2B 8bce8e12a82b361989e5b8a7c11c25a642fc2d62af37b74764db675ed6d91bc4b011318633b42a942abd0b59db70658f1cb28bf4873722095a998d5e63a00d51 SHA512 4fe0992ccc8f7f9dcab956c1ec06a647e4a7bab67c0f2a78c4e004491a5d8685240dadfd2c248e4fd6a58747a5da67ab8c8dc35c1a0de5a85431da431a00607f
AUX plplot-5.12.0-ocaml-remove-rpath.patch 2012 BLAKE2B 47bbcc2c7e49b50f045c786ae3d5a799b45ab734e24e815168d9a6364fe09fc63869b57dd0a12b5c70ef5b69444ad6dba31bcc123faada6df9ac0af8cb0984d5 SHA512 6c40de6ab578ab8c347f12335b8a91976e5e4d8eee039512048039507c5e2b4a75b5bbfdde5ae347d2ccb167679b6574460d3f737ad37ee8902c7bcdc96af05d
+AUX plplot-5.12.0-safe-string.patch 791 BLAKE2B 8a3b37dd236d3086fe0780dd0e10d670884f706b4e6164980d8197de1a3f49fc0ef2ee15cd9f499c50b14a454bf62a6d6aee1512522ab5a3fe16c8fb93fc042f SHA512 c531a57ef2203c01f5d44f0bd1edc5101c740986987e454019fe42f4905dbd9b5f13ad93e91e3c73c95c320e9128ac4696021e258dc523fc9f5559348eda9129
+AUX plplot-5.15.0-ieee.patch 1243 BLAKE2B 291274ae674f3471fdf081619c2b8e14caec490b391413e52bc8b424f596757297b48b9af09647196adc3069f81750652d05d8da5582092ad13e92d56af05c01 SHA512 e242ff53ac490f17b898cf8184446a342bd9ca36f6245f4142cefe275aa2f5865e13428cdbc8663e80a56d7f0c438492b3529dd7c3dd0400d380d99928c58318
+AUX plplot-5.15.0-multiarch.patch 2544 BLAKE2B 288fc0f26f1f30cdbb786642ca5a59d8ba29958ffa690f87622748d4fa47ba098bce6671988e55f59526113dba08370ef15b0bc516552a9dee6918f430444dd5 SHA512 f98ea4f09cfaff7b1b2ad78940a10c5368ad29f402daca34a9a1ee2eeb3b275137576db884f1304ddc4c48ca83c032b9b2b10132a850839fba9c176bb27255a7
+AUX plplot-5.15.0-ocaml-rpath.patch 9583 BLAKE2B b475580f9e4da0ab660dc2d0dfbdbbfbd277787a12421cf24c31453952257111c06e790a7f728f9b97ef16a8c4ea5a5e856e852f54cd81445a1f5b2aadb9df9d SHA512 5262e9922829ee3ec223b60b794de728e15104ba176f1a1e2fe4ba14929b08943cc5f00d166441c0e8ed5dfb09902044e3c62d944efdcf4bc3be604a56cb424a
+AUX plplot-5.15.0-ocaml.patch 3424 BLAKE2B ba1c9f758c319a76b0a457a287ee6934ee39300401e2d9a364c70446e12af679ce55c22eda0bf7aa7cb621fd4c76f56268afa649ba935a716495049f41706187 SHA512 1387625d1e784fb92ab3279a342c08d8f85fc055e0c69ce1af9656492102072c7a1d5a6498f8758dc3fd35e0543e80b65cd315641886f9baff60f7740583a0e3
AUX plplot-5.9.6-python.patch 379 BLAKE2B cf08250c851c3405517183e8f3425f42ede2f850cc8bcd89828e3e1b89035731a8a3face0988750e9f9e5dce2fa0404b23b2721c5b315ff61aeac552fd6e05f2 SHA512 cb2022bda3d5408ef0b2dc280981ad8bdb2f7ecb20d827f7e71ce063fba60963e68aeaa5efd8eef87da8e3dc270b609f7cb342c1da175cd757c9f135173842e4
+AUX replace-gdc-extensions.patch 15746 BLAKE2B 76d778d095c3c18ad990610b436ad9fad778187c572df260b9cc8278b3d17ef313c6462d07c2f23e1c7c7497e9028610a6bd2823a789df2c1dbb83dee723d8dc SHA512 9d4733bb79f654fdb0b6344be8dc366fc43251dc17dd5ce7dad4fe7883499dcfc58e53d278272c9263753ea45d5c1e9c406e906694366aeef2821bc8f0b2b3e2
DIST plplot-5.12.0.tar.gz 16253895 BLAKE2B 5b89c0a6a478c6faf9bff2e2765eb6b13b6b1fc5644dbcdbc6aa88c510ad82a04253a7cb33d16816ff128eb866aad0f5cbccc365687ebb62022926f3c8545a0b SHA512 5566b9db0ddbb5ecaa677168f65f240197b2b8b23a02a812efc7e97fc79686b523591edad9c83de2e72935090d426b4cb9fe82496d9eb5a5a521c42161e9848b
+DIST plplot-5.15.0.tar.gz 15380293 BLAKE2B 41f359c4e86c7a26fe53a9d82a9f02aeb97b5b6f44abca590621640c56e50a62823e8a03165a939689f5456cee419b8292ea34faccd07641bd4a953b6f1d73fe SHA512 54533245569b724a7ef90392cc6e9ae65873e6cbab923df0f841c8b43def5e4307690894c7681802209bd3c8df97f54285310a706428f79b3340cce3207087c8
EBUILD plplot-5.12.0-r1.ebuild 7243 BLAKE2B 76b1b6838834e291dcebd2ab2e25265bcea2c51b46c9715e19b38586b903513837ba01f643b45f8480d76c206b13b3736c717338458c46f91db99c8785562ae2 SHA512 014b44dbc72abfa66a054059ed8436ee9cbc52152eb6cdfb7e105103513e14ef4d236b0bd6824d24815a7ab7a42e314567572206dfc2f27248fa21b2f53e6450
+EBUILD plplot-5.15.0.ebuild 7153 BLAKE2B 74fc0873428d0022eafb6c591439773c904c98423112593fd093d076b0dc9ad10599b6abad8e6f275a7549776fdd617b02aab22f1009aaee515b564ef9ac768e SHA512 7f689d63e44cbe0cb88ba24bea9e5f9fb0c86908d43680a653ee48125605d6556392472d133941edbbc490c7a8e150a1da14af210ab7f059238006b4eecbfaf3
MISC metadata.xml 1487 BLAKE2B 33e45227a6094c8b7e8602081e267b5aad51cf90638269b544feb308f95e32757ae5784edc14cda97d8d0e4d5e209e9ba3528f8f763adada95ceb8c61d11fdc8 SHA512 ebace14f95cf9d6e3c71b8a4fa3ed411052183e2fa67197173f99045e22503b0e80dac6762ddb38fa97b7e36b67693b9c7352cba31d399d0b819d8da9cbf27ea
diff --git a/sci-libs/plplot/files/plplot-5.12.0-safe-string.patch b/sci-libs/plplot/files/plplot-5.12.0-safe-string.patch
new file mode 100644
index 000000000000..5a3605168e61
--- /dev/null
+++ b/sci-libs/plplot/files/plplot-5.12.0-safe-string.patch
@@ -0,0 +1,20 @@
+--- plplot-5.12.0.old/examples/ocaml/x20.ml 2017-01-29 01:50:35.000000000 +0000
++++ plplot-5.12.0/examples/ocaml/x20.ml 2017-11-18 12:10:33.476409441 +0000
+@@ -59,7 +59,7 @@
+ let w, h = Scanf.sscanf w_h_line "%d %d" (fun w h -> w, h) in
+ let num_col = Scanf.sscanf num_col_line "%d" (fun n -> n) in
+
+- let img = String.make (w * h) ' ' in
++ let img = Bytes.make (w * h) ' ' in
+ let imf = Array.make_matrix w h 0.0 in
+
+ (* Note that under 32bit OCaml, this will only work when reading strings up
+@@ -72,7 +72,7 @@
+ for j = 0 to h - 1 do
+ imf.(i).(j) <-
+ (* flip image up-down *)
+- float_of_int (int_of_char (img.[(h - 1 - j ) * w + i]));
++ float_of_int (int_of_char (Bytes.get img ((h - 1 - j ) * w + i)));
+ done
+ done;
+ imf, w, h, num_col
diff --git a/sci-libs/plplot/files/plplot-5.15.0-ieee.patch b/sci-libs/plplot/files/plplot-5.15.0-ieee.patch
new file mode 100644
index 000000000000..065f59a52dfd
--- /dev/null
+++ b/sci-libs/plplot/files/plplot-5.15.0-ieee.patch
@@ -0,0 +1,19 @@
+diff -up plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/cmake/modules/csiro.cmake.ieee plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/cmake/modules/csiro.cmake
+--- plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/cmake/modules/csiro.cmake.ieee 2018-09-19 20:31:11.333168883 -0600
++++ plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/cmake/modules/csiro.cmake 2018-09-19 20:31:56.323728783 -0600
+@@ -27,15 +27,6 @@ option(WITH_CSA "Enable use of the csa l
+ # expanded to a lot more cases as we gain platform experience.
+ set(NAN_CFLAGS ${CMAKE_C_FLAGS})
+ if(PL_HAVE_QHULL OR WITH_CSA)
+- if(CMAKE_SYSTEM_PROCESSOR MATCHES "i[0-9]86" AND NOT CMAKE_C_COMPILER MATCHES "gcc")
+- set(NAN_CFLAGS "${NAN_CFLAGS} -mieee-fp")
+- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "alpha.*")
+- if(CMAKE_C_COMPILER MATCHES "gcc")
+- set(NAN_CFLAGS "${NAN_CFLAGS} -mieee")
+- else(CMAKE_C_COMPILER MATCHES "gcc")
+- set(NAN_CFLAGS "${NAN_CFLAGS} -ieee")
+- endif(CMAKE_C_COMPILER MATCHES "gcc")
+- endif(CMAKE_SYSTEM_PROCESSOR MATCHES "i[0-9]86" AND NOT CMAKE_C_COMPILER MATCHES "gcc")
+ if(NOT DEFINED NaNAwareCCompiler)
+ message(STATUS "Check for NaN awareness in C compiler")
+ try_run(RUN_RESULT COMPILE_RESULT
diff --git a/sci-libs/plplot/files/plplot-5.15.0-multiarch.patch b/sci-libs/plplot/files/plplot-5.15.0-multiarch.patch
new file mode 100644
index 000000000000..4fc5b0b43d9e
--- /dev/null
+++ b/sci-libs/plplot/files/plplot-5.15.0-multiarch.patch
@@ -0,0 +1,56 @@
+diff -up plplot-5.15.0/examples/c/Makefile.examples.in.multiarch plplot-5.15.0/examples/c/Makefile.examples.in
+--- plplot-5.15.0/examples/c/Makefile.examples.in.multiarch 2019-09-17 21:47:24.535984257 -0600
++++ plplot-5.15.0/examples/c/Makefile.examples.in 2019-09-17 21:50:37.029009186 -0600
+@@ -23,9 +23,6 @@ SHELL = @SH_EXECUTABLE@
+ CC = @CC@
+ EXEEXT = @EXEEXT@
+
+-PKG_CONFIG_ENV = @PKG_CONFIG_ENV@
+-install_tree_c_RPATHCMD = @install_tree_c_RPATHCMD@
+-
+ @extXdrawable_true@extXdrawable_EXECUTABLES_list = \
+ @extXdrawable_true@ extXdrawable_demo$(EXEEXT)
+
+diff -up plplot-5.15.0/examples/c++/Makefile.examples.in.multiarch plplot-5.15.0/examples/c++/Makefile.examples.in
+--- plplot-5.15.0/examples/c++/Makefile.examples.in.multiarch 2019-09-17 21:47:24.536984262 -0600
++++ plplot-5.15.0/examples/c++/Makefile.examples.in 2019-09-17 21:50:18.672911449 -0600
+@@ -23,15 +23,10 @@ SHELL = @SH_EXECUTABLE@
+ CXX = @CXX@
+ EXEEXT = @EXEEXT@
+
+-PKG_CONFIG_ENV = @PKG_CONFIG_ENV@
+-install_tree_cxx_RPATHCMD = @install_tree_cxx_RPATHCMD@
+-
+-@wxwidgets_true@install_tree_wxwidgets_RPATHCMD = @install_tree_wxwidgets_RPATHCMD@
+ @wxwidgets_true@PLPLOTWXWIDGETS_EXECUTABLES_list = \
+ @wxwidgets_true@ @wxdemo_name@$(EXEEXT)
+
+ @qt_gui_true@QT_MOC_EXECUTABLE = @QT_MOC_EXECUTABLE@
+-@qt_gui_true@install_tree_qt_RPATHCMD = @install_tree_qt_RPATHCMD@
+ @qt_gui_true@qt_gui_EXECUTABLES_list = \
+ @qt_gui_true@ qt_example$(EXEEXT)
+
+diff -up plplot-5.15.0/examples/fortran/Makefile.examples.in.multiarch plplot-5.15.0/examples/fortran/Makefile.examples.in
+--- plplot-5.15.0/examples/fortran/Makefile.examples.in.multiarch 2019-09-17 21:47:24.537984268 -0600
++++ plplot-5.15.0/examples/fortran/Makefile.examples.in 2019-09-17 21:48:01.062178741 -0600
+@@ -24,7 +24,6 @@ SHELL = @SH_EXECUTABLE@
+ Fortran = @FC@
+ EXEEXT = @EXEEXT@
+
+-PKG_CONFIG_ENV = @PKG_CONFIG_ENV@
+ install_tree_fortran_RPATHCMD = @install_tree_fortran_RPATHCMD@
+
+ EXECUTABLES_list = \
+diff -up plplot-5.15.0/examples/tk/Makefile.examples.in.multiarch plplot-5.15.0/examples/tk/Makefile.examples.in
+--- plplot-5.15.0/examples/tk/Makefile.examples.in.multiarch 2019-09-17 21:47:24.538984273 -0600
++++ plplot-5.15.0/examples/tk/Makefile.examples.in 2019-09-17 21:50:00.816816375 -0600
+@@ -24,9 +24,6 @@ SHELL = @SH_EXECUTABLE@
+ CC = @CC@
+ EXEEXT = @EXEEXT@
+
+-PKG_CONFIG_ENV = @PKG_CONFIG_ENV@
+-install_tree_tk_RPATHCMD = @install_tree_tk_RPATHCMD@
+-
+ EXECUTABLES_list = xtk01$(EXEEXT)
+ # Second and fourth examples depend on itk.
+ @itk_true@itk_EXECUTABLES_list = xtk02$(EXEEXT) xtk04$(EXEEXT)
diff --git a/sci-libs/plplot/files/plplot-5.15.0-ocaml-rpath.patch b/sci-libs/plplot/files/plplot-5.15.0-ocaml-rpath.patch
new file mode 100644
index 000000000000..f3fe04d84a7c
--- /dev/null
+++ b/sci-libs/plplot/files/plplot-5.15.0-ocaml-rpath.patch
@@ -0,0 +1,166 @@
+commit 6b215267e7baeae83906bec8dab72a549aeda6c8
+Author: Alan W. Irwin <airwin@users.sourceforge.net>
+Date: Mon Sep 23 17:39:31 2019 -0700
+
+ Build system: Fix ocaml examples core build for -DUSE_RPATH=OFF case
+
+ Thanks to Orion Poplawski for reporting this issue which is that the
+ *core build_tree* rpath manipulations for the ocaml examples were
+ being (incorrectly) skipped for the -DUSE_RPATH=OFF case. The fix for
+ this issue required non-trivial CMake logic changes so was extensively
+ tested (see below).
+
+ Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
+ (Debian Buster = Stable) with the following steps:
+
+ # Choose these prefixes to assure that the source, build, and install
+ # trees have blanks in their pathnames (to test those cases during
+ # this comprehensive test)
+ COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
+ SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
+
+ # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to
+ # avoid important bugs in the Debian Testing versions of those
+ # packages. Also access a local version of libqhull to test that
+ # additional rpath possibility.
+
+ # Put a local build of CMake-3.15.20190829-g3ec986c first on the PATH to thoroughly
+ # test our build system for a locally built CMake version that includes an
+ # essential fix so that D language support works properly for the ldc2 and dmd compilers.
+
+ # For this particular test use the gdc D compiler if D enabled (which it was not, see below).
+
+ # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk
+ # components. (This step will not be necessary as soon as the PLplot
+ # build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets finding
+ # more robust.)
+
+ # Use -DSWIG_EXECUTABLE=/home/software/swig/install/bin/swig to test
+ # swig-4.0.0 that I built for myself.
+
+ # To save time, constrain the test to just the ocaml binding and svg device.
+
+ # To save a lot of babysitting of this test, constrain the test by dropping
+ # the interactive component.
+
+ time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install:/home/software/qhull/install PATH=/home/software/cmake/install-3ec986ce8e/bin:"$PATH" DC=gdc "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DSWIG_EXECUTABLE=/home/software/swig/install/bin/swig -DDEFAULT_NO_BINDINGS=ON -DENABLE_ocaml=ON -DDEFAULT_NO_DEVICES=ON -DPLD_svg=ON " --build_command "make -j18" --ctest_command "ctest -j18" --do_test_interactive no)
+
+ The time result on my Ryzen 7 1700 system with 16 hardware threads was
+
+ real 4m12.625s
+ user 4m22.128s
+ sys 0m58.076s
+
+ The above test was repeated with the following changes:
+
+ # Specify LD_LIBRARY_PATH to workaround the lack of special rpath
+ # support for external local versions of software
+
+ # Use the -DUSE_RPATH=OFF cmake option to drop all install-tree
+ # rpath support (and to ignore any special rpath support for
+ # external local versions of software).
+
+ # Further constrain the test to be performed just for the core build tree
+ # since -DUSE_RPATH=OFF will obviously give bad results for the install
+ # tree for this non-standard installation location.
+
+ time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install:/home/software/qhull/install PATH=/home/software/cmake/install-3ec986ce8e/bin:"$PATH" DC=gdc LD_LIBRARY_PATH=/home/software/lasi_svn/install/lib:/home/software/qhull/install/lib "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DSWIG_EXECUTABLE=/home/software/swig/install/bin/swig -DDEFAULT_NO_BINDINGS=ON -DENABLE_ocaml=ON -DDEFAULT_NO_DEVICES=ON -DPLD_svg=ON -DUSE_RPATH=OFF" --build_command "make -j18" --ctest_command "ctest -j18" --do_test_interactive no --do_test_install_tree no --do_test_traditional_install_tree no)
+
+ The time result on my Ryzen 7 1700 system with 16 hardware threads was
+
+ real 1m57.888s
+ user 1m42.156s
+ sys 0m26.478s
+
+ Both these comprehensive tests (one which tests that the default
+ -DUSE_RPATH=ON still works for the ocaml case and one similar to
+ Orion's test case which tests that -DUSER_RPATH=OFF works for the
+ ocaml case in the core build tree) ran without issues (e.g., there
+ were no hangs or other obvious errors) and was followed up by the
+ evaluation procedure documented in doc/wiki_source/Testing_PLplot.
+ Those evaluations showed no configure, build, or obvious run-time
+ errors (i.e., no non-zero return codes for any of the steps in these
+ comprehensive tests), and the difference test results (done with the
+ default svg device) were perfect as well.
+
+diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
+index 93cb01b..5bcbceb 100644
+--- a/examples/CMakeLists.txt
++++ b/examples/CMakeLists.txt
+@@ -343,27 +343,24 @@ if(CORE_BUILD)
+ # Extra layer of -Wl indirection required for the nagfor compiler
+ string(REPLACE "-Wl," "-Wl,-Wl,," install_tree_fortran_RPATHCMD ${install_tree_fortran_RPATHCMD})
+ endif(install_tree_fortran_RPATHCMD AND CMAKE_Fortran_COMPILER MATCHES "nagfor")
++ endif(USE_RPATH AND NOT WIN32_OR_CYGWIN)
++
++ # ocaml is a special case not handled by the above logic for other languages
++ # because the (unofficial) CMake language support is
++ # implemented with low-level add_custom commands/targets so that rpath
++ # must be specified for 3 cases (the traditional build of the installed
++ # examples, and the CMake-based build of the build-tree and install-tree examples).
++ # Furthermore, the rpath syntax is different for ocaml.
++ if(ENABLE_ocaml)
++ set(language ocaml)
+
+- # ocaml is a special case because the (unofficial) CMake language support is
+- # implemented with low-level add_custom commands/targets so that rpath
+- # must be specified for 3 cases (the traditional build of the installed
+- # examples, and the CMake-based build of the build-tree and install-tree examples).
+- # Furthermore, the rpath syntax is different for ocaml.
+- if(ENABLE_ocaml)
+- set(language ocaml)
++ if(USE_RPATH AND NOT WIN32_OR_CYGWIN)
+ # Each of the installed examples that are built depend on a library installed in ${LIB_DIR}.
+ set(install_tree_${language}_RPATH ${LIB_DIR})
+- # The ocaml examples depend on the plplot library
++ # The ocaml examples depend on the plplot library so use INSTALL_RPATH
++ # property of that library target.
+ set(tll_arguments PLPLOT::plplot)
+ process_rpath(install_tree_${language}_RPATH "${tll_arguments}")
+-
+- # Special case of the ocaml build-tree examples.
+- # Must be done before ${install_tree_${language}_RPATH gets transformed
+- # from official CMake list to colon-separated form.
+- set(build_tree_${language}_RPATH ${install_tree_${language}_RPATH})
+- list(REMOVE_ITEM build_tree_${language}_RPATH ${LIB_DIR})
+- list(APPEND build_tree_${language}_RPATH ${CMAKE_BINARY_DIR}/src)
+-
+ # Transform from semicolon- to colon-separated list. (Quotes
+ # for last argument required to process whole argument as string
+ # containing semicolons rather than as the concatanated elements
+@@ -372,19 +369,30 @@ if(CORE_BUILD)
+ # install- and build-tree versions of CMake-based build of ocaml
+ # examples
+ string(REGEX REPLACE ";" ":" install_tree_${language}_RPATH "${install_tree_${language}_RPATH}")
+- string(REGEX REPLACE ";" ":" build_tree_${language}_RPATH "${build_tree_${language}_RPATH}")
+ string(REPLACE " " "\\ " install_tree_${language}_RPATH_ESCAPED "${install_tree_${language}_RPATH}")
+- string(REPLACE " " "\\ " build_tree_${language}_RPATH_ESCAPED "${build_tree_${language}_RPATH}")
+-
+ # install_tree_ocaml_RPATHCMD needed in configured traditional
+ # Makefile for the ocaml subdirectory.
+ # Ocaml compiler requires -ccopt in front of every -Wl option:
+ set(install_tree_${language}_RPATHCMD "-ccopt -Wl,-rpath -ccopt -Wl,\"${install_tree_${language}_RPATH_ESCAPED}\"")
++ endif(USE_RPATH AND NOT WIN32_OR_CYGWIN)
+
+- endif(ENABLE_ocaml)
++ # Special case of the ocaml build-tree examples.
++ # Follow above process_rpath logic but with some changes
++ # appropriate for the core build of the ocaml examples.
++ set(build_tree_${language}_RPATH ${CMAKE_BINARY_DIR}/src)
++ set(tll_arguments PLPLOT::plplot)
++ process_rpath(build_tree_${language}_RPATH "${tll_arguments}")
+
++ # Get rid of any mention of ${LIB_DIR} for the core build version
++ # of the examples.
++ # Must be done before ${build_tree_${language}_RPATH gets transformed
++ # from official CMake list to colon-separated form.
++ list(REMOVE_ITEM build_tree_${language}_RPATH ${LIB_DIR})
+
+- endif(USE_RPATH AND NOT WIN32_OR_CYGWIN)
++ string(REGEX REPLACE ";" ":" build_tree_${language}_RPATH "${build_tree_${language}_RPATH}")
++ string(REPLACE " " "\\ " build_tree_${language}_RPATH_ESCAPED "${build_tree_${language}_RPATH}")
++
++ endif(ENABLE_ocaml)
+
+ # Install Chloe.pgm in installed examples directory so that all implementations
+ # of example 20 in the various examples subdirectories can conveniently
diff --git a/sci-libs/plplot/files/plplot-5.15.0-ocaml.patch b/sci-libs/plplot/files/plplot-5.15.0-ocaml.patch
new file mode 100644
index 000000000000..6f0827f334e5
--- /dev/null
+++ b/sci-libs/plplot/files/plplot-5.15.0-ocaml.patch
@@ -0,0 +1,43 @@
+diff -up plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/CMakeLists.txt.ocaml plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/CMakeLists.txt
+--- plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/CMakeLists.txt.ocaml 2018-09-19 17:38:53.000000000 -0600
++++ plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/CMakeLists.txt 2018-09-19 20:32:29.884146436 -0600
+@@ -326,11 +326,11 @@ if(ENABLE_ocaml)
+ ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmo
+ )
+
+- # ocamlc -a -custom builds a *.cma library from *.cmo
++ # ocamlc -a builds a *.cma library from *.cmo
+ add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/plplot.cma
+- COMMAND ${OCAMLC} -a -custom -o plplot.cma plplot_core.cmo plplot.cmo -dllib -lplplot_stubs -ccopt -L. -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl ${ocaml_LIBRARIES_FLAGS}
++ COMMAND ${OCAMLC} -a -o plplot.cma plplot_core.cmo plplot.cmo -dllib -lplplot_stubs -ccopt -L. -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl ${ocaml_LIBRARIES_FLAGS}
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmo
+ ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmo
+@@ -341,7 +341,7 @@ if(ENABLE_ocaml)
+ add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/installed_plplot.cma
+- COMMAND ${OCAMLC} -a -custom -o installed_plplot.cma plplot_core.cmo plplot.cmo -dllib -lplplot_stubs -ccopt -L. -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl ${installed_ocaml_LIBRARIES_FLAGS}
++ COMMAND ${OCAMLC} -a -o installed_plplot.cma plplot_core.cmo plplot.cmo -dllib -lplplot_stubs -ccopt -L. -cclib -lplplot_stubs -ccopt -L${CAMLIDL_LIB_DIR} -cclib -lcamlidl ${installed_ocaml_LIBRARIES_FLAGS}
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/plplot_core.cmo
+ ${CMAKE_CURRENT_BINARY_DIR}/plplot.cmo
+diff -up plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/plcairo/CMakeLists.txt.ocaml plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/plcairo/CMakeLists.txt
+--- plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/plcairo/CMakeLists.txt.ocaml 2018-09-19 20:32:29.884146436 -0600
++++ plplot-plplot-a9d9500c732d4eae47ed7fca687e02ec8a48d02c/bindings/ocaml/plcairo/CMakeLists.txt 2018-09-19 20:33:18.389750080 -0600
+@@ -91,11 +91,11 @@ if(ENABLE_ocaml AND OCAML_HAS_CAIRO)
+ ${CMAKE_CURRENT_BINARY_DIR}/plcairo.ml
+ )
+
+- # ocamlc -a -custom builds a *.cma library from *.cmo
++ # ocamlc -a builds a *.cma library from *.cmo
+ add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cma
+- COMMAND ${OCAMLC} -a -custom -o ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cma -I ${PATH_TO_PLPLOT_CMA} plplot.cma ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cmo -dllib -lplcairo_stubs -ccopt -L${CMAKE_CURRENT_BINARY_DIR} -cclib -lplcairo_stubs -ccopt -L${CMAKE_BINARY_DIR}/src -cclib -l${WRITEABLE_TARGET}plplot -dllpath ${CMAKE_BINARY_DIR}/src
++ COMMAND ${OCAMLC} -a -o ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cma -I ${PATH_TO_PLPLOT_CMA} plplot.cma ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cmo -dllib -lplcairo_stubs -ccopt -L${CMAKE_CURRENT_BINARY_DIR} -cclib -lplcairo_stubs -ccopt -L${CMAKE_BINARY_DIR}/src -cclib -l${WRITEABLE_TARGET}plplot -dllpath ${CMAKE_BINARY_DIR}/src
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cmo
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
diff --git a/sci-libs/plplot/files/replace-gdc-extensions.patch b/sci-libs/plplot/files/replace-gdc-extensions.patch
new file mode 100644
index 000000000000..551926dc1540
--- /dev/null
+++ b/sci-libs/plplot/files/replace-gdc-extensions.patch
@@ -0,0 +1,434 @@
+Description: Replace gdc extensions in D binding and examples source code with equivalent standard D source code
+ This patch is needed to avoid FTBFS with recent gdc versions.
+Origin: upstream, https://sourceforge.net/p/plplot/plplot/ci/74799e02c5435e491b46dfc1fd053753105c3441/
+Reviewed-by: Sébastien Villemot <sebastien@debian.org>
+Last-Update: 2019-10-08
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/bindings/d/plplot.d
++++ b/bindings/d/plplot.d
+@@ -298,7 +298,7 @@ void plfill3( PLFLT[] x, PLFLT[] y, PLFL
+ // Get the current device (keyword) name
+ void plgdev( out string p_dev )
+ {
+- char cdev[1024];
++ char[1024] cdev;
+ c_plgdev( cdev.ptr );
+ p_dev = to!string( cdev.ptr );
+ }
+@@ -306,7 +306,7 @@ void plgdev( out string p_dev )
+ // Get the (current) output file name. Must be preallocated to >80 bytes
+ void plgfnam( out string fnam )
+ {
+- char cfnam[1024];
++ char[1024] cfnam;
+ c_plgfnam( cfnam.ptr );
+ fnam = to!string( cfnam.ptr );
+ }
+@@ -337,7 +337,7 @@ void plgriddata( PLFLT[] x, PLFLT[] y,
+ // Get the current library version number
+ void plgver( out string p_ver )
+ {
+- char cver[1024];
++ char[1024] cver;
+ c_plgver( cver.ptr );
+ p_ver = to!string( cver.ptr );
+ }
+--- a/examples/d/x01d.d
++++ b/examples/d/x01d.d
+@@ -224,7 +224,7 @@ class plot {
+
+ if ( do_test && test_xor )
+ {
+- writefln( "The -xor command line option can only be exercised if your "
++ writefln( "The -xor command line option can only be exercised if your " ~
+ "system\nhas usleep(), which does not seem to happen." );
+ }
+ }
+@@ -294,4 +294,4 @@ class plot {
+ plcol0( 4 );
+ plline( x, y );
+ }
+-}
+\ No newline at end of file
++}
+--- a/examples/d/x08d.d
++++ b/examples/d/x08d.d
+@@ -24,7 +24,7 @@
+ import plplot;
+ import std.string;
+ import std.math;
+-import std.c.stdlib;
++import core.stdc.stdlib;
+
+ //--------------------------------------------------------------------------
+ // cmap1_init1
+@@ -92,8 +92,8 @@ int main( char[][] args )
+ PLFLT[] alt = [ 60.0, 40.0 ];
+ PLFLT[] az = [ 30.0, -30.0 ];
+
+- string title[] = [ "#frPLplot Example 8 - Alt=60, Az=30",
+- "#frPLplot Example 8 - Alt=40, Az=-30" ];
++ string[] title = [ "#frPLplot Example 8 - Alt=60, Az=30",
++ "#frPLplot Example 8 - Alt=40, Az=-30" ];
+
+ // Parse and process command line arguments
+ plparseopts( args, PL_PARSE_FULL );
+--- a/examples/d/x11d.d
++++ b/examples/d/x11d.d
+@@ -48,16 +48,16 @@ void cmap1_init()
+ //--------------------------------------------------------------------------
+ int main( char[][] args )
+ {
+- const nlevel = 10;
+- const XPTS = 35; // Data points in x
+- const YPTS = 46; // Data points in y
++ const nlevel = 10;
++ const XPTS = 35; // Data points in x
++ const YPTS = 46; // Data points in y
+
+- int[] opt = [ DRAW_LINEXY, DRAW_LINEXY ];
++ int[] opt = [ DRAW_LINEXY, DRAW_LINEXY ];
+
+- PLFLT[] alt = [ 33.0, 17.0 ];
+- PLFLT[] az = [ 24.0, 115.0 ];
++ PLFLT[] alt = [ 33.0, 17.0 ];
++ PLFLT[] az = [ 24.0, 115.0 ];
+
+- string title[] = [ "#frPLplot Example 11 - Alt=33, Az=24, Opt=3",
++ string[] title = [ "#frPLplot Example 11 - Alt=33, Az=24, Opt=3",
+ "#frPLplot Example 11 - Alt=17, Az=115, Opt=3" ];
+
+ PLFLT xx, yy;
+--- a/examples/d/x15d.d
++++ b/examples/d/x15d.d
+@@ -145,10 +145,10 @@ class plot {
+ //--------------------------------------------------------------------------
+ public void plot2( PLFLT[][] z )
+ {
+- static PLINT nlin[10] = [ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 ];
+- static PLINT inc[10][2] = [ [450, 0], [-450, 0], [0, 0], [900, 0], [300, 0],
++ static PLINT[10] nlin = [ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 ];
++ static PLINT[2][10] inc = [ [450, 0], [-450, 0], [0, 0], [900, 0], [300, 0],
+ [450, -450], [0, 900], [0, 450], [450, -450], [0, 900] ];
+- static PLINT del[10][2] = [ [2000, 2000], [2000, 2000], [2000, 2000],
++ static PLINT[2][10] del = [ [2000, 2000], [2000, 2000], [2000, 2000],
+ [2000, 2000], [2000, 2000], [2000, 2000],
+ [2000, 2000], [2000, 2000], [4000, 4000],
+ [4000, 2000] ];
+@@ -191,11 +191,11 @@ class plot {
+ //--------------------------------------------------------------------------
+ public void plot3()
+ {
+- static PLFLT xx[2][5] = [ [-1.0, 1.0, 1.0, -1.0, -1.0],
++ static PLFLT[5][2] xx = [ [-1.0, 1.0, 1.0, -1.0, -1.0],
+ [-1.0, 1.0, 1.0, -1.0, -1.0] ];
+- static PLFLT yy[2][5] = [ [1.0, 1.0, 0.0, 0.0, 1.0],
++ static PLFLT[5][2] yy = [ [1.0, 1.0, 0.0, 0.0, 1.0],
+ [-1.0, -1.0, 0.0, 0.0, -1.0] ];
+- static PLFLT zz[2][5] = [ [0.0, 0.0, 1.0, 1.0, 0.0],
++ static PLFLT[5][2] zz = [ [0.0, 0.0, 1.0, 1.0, 0.0],
+ [0.0, 0.0, 1.0, 1.0, 0.0] ];
+
+ pladv( 0 );
+--- a/examples/d/x16d.d
++++ b/examples/d/x16d.d
+@@ -195,7 +195,7 @@ int main( char[][] args )
+ string[] axis_opts = [
+ "bcvtm",
+ ];
+- PLFLT[] values[NUM_AXES];
++ PLFLT[][NUM_AXES] values;
+ for ( size_t i = 0; i < NUM_AXES; i++ )
+ {
+ values[i] = new PLFLT[ns];
+@@ -207,7 +207,7 @@ int main( char[][] args )
+ 0,
+ ];
+ const int NUM_LABELS = 1;
+- PLINT label_opts[] = [
++ PLINT[] label_opts = [
+ PL_COLORBAR_LABEL_BOTTOM,
+ ];
+ string[] labels = [
+--- a/examples/d/x17d.d
++++ b/examples/d/x17d.d
+@@ -4,7 +4,7 @@
+ import std.string;
+ import std.math;
+ import std.stdio;
+-import std.c.stdlib;
++import core.stdc.stdlib;
+ import plplot;
+
+
+--- a/examples/d/x18d.d
++++ b/examples/d/x18d.d
+@@ -6,9 +6,9 @@ import std.string;
+
+ import plplot;
+
+-int opt[] = [ 1, 0, 1, 0 ];
+-PLFLT alt[] = [ 20.0, 35.0, 50.0, 65.0 ];
+-PLFLT az[] = [ 30.0, 40.0, 50.0, 60.0 ];
++int[] opt = [ 1, 0, 1, 0 ];
++PLFLT[] alt = [ 20.0, 35.0, 50.0, 65.0 ];
++PLFLT[] az = [ 30.0, 40.0, 50.0, 60.0 ];
+
+ //--------------------------------------------------------------------------
+ // main
+@@ -81,7 +81,7 @@ int main( char[][] args )
+
+ void test_poly( int k )
+ {
+- PLINT draw[][] = [ [ 1, 1, 1, 1 ],
++ PLINT[][] draw = [ [ 1, 1, 1, 1 ],
+ [ 1, 0, 1, 0 ],
+ [ 0, 1, 0, 1 ],
+ [ 1, 1, 0, 0 ] ];
+--- a/examples/d/x19d.d
++++ b/examples/d/x19d.d
+@@ -4,7 +4,7 @@
+
+ import std.math;
+ import std.string;
+-import std.c.string;
++import core.stdc.string;
+
+ import plplot;
+
+@@ -109,15 +109,15 @@ int main( char[][] args )
+ PLFLT maxy = 80;
+
+ //variables for the shapelib example
+- const PLINT nbeachareas = 2;
+- const PLINT beachareas[] = [ 23, 24 ];
+- const nwoodlandareas = 94;
+- PLINT woodlandareas[94];
+- const PLINT nshingleareas = 22;
+- const PLINT shingleareas[] = [ 0, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 217, 2424, 2425, 2426, 2427, 2428, 2491, 2577 ];
+- const PLINT ncragareas = 2024;
+- PLINT cragareas[2024];
+- const PLINT majorroads[] = [ 33, 48, 71, 83, 89, 90, 101, 102, 111 ];
++ const PLINT nbeachareas = 2;
++ const PLINT[] beachareas = [ 23, 24 ];
++ const nwoodlandareas = 94;
++ PLINT[94] woodlandareas;
++ const PLINT nshingleareas = 22;
++ const PLINT[] shingleareas = [ 0, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 217, 2424, 2425, 2426, 2427, 2428, 2491, 2577 ];
++ const PLINT ncragareas = 2024;
++ PLINT[2024] cragareas;
++ const PLINT[] majorroads = [ 33, 48, 71, 83, 89, 90, 101, 102, 111 ];
+
+ plinit();
+
+@@ -173,8 +173,8 @@ int main( char[][] args )
+ // Show Baltimore, MD on the map
+ plcol0( 2 );
+ plssym( 0.0, 2.0 );
+- PLFLT x[1] = -76.6125;
+- PLFLT y[1] = 39.2902778;
++ PLFLT[1] x = -76.6125;
++ PLFLT[1] y = 39.2902778;
+ plpoin( x, y, 18 );
+ plssym( 0.0, 1.0 );
+ plptex( -76.6125, 43.0, 0.0, 0.0, 0.0, "Baltimore, MD" );
+--- a/examples/d/x23d.d
++++ b/examples/d/x23d.d
+@@ -336,14 +336,14 @@ int main( char[][] args )
+ }
+ else if ( page == 14 )
+ {
+- text = format( "Page 15, %s, %s, %s: #<0x%1x0>#<0x%1x1>#<0x%1x2>"
++ text = format( "Page 15, %s, %s, %s: #<0x%1x0>#<0x%1x1>#<0x%1x2>" ~
+ "The quick brown fox jumps over the lazy dog",
+ family[family_index], style[style_index], weight[weight_index],
+ family_index, style_index, weight_index );
+ }
+ else if ( page == 15 )
+ {
+- text = format( "Page 16, %s, %s, %s: #<%s/>#<%s/>#<%s/>"
++ text = format( "Page 16, %s, %s, %s: #<%s/>#<%s/>#<%s/>" ~
+ "The quick brown fox jumps over the lazy dog",
+ family[family_index], style[style_index], weight[weight_index],
+ family[family_index], style[style_index], weight[weight_index] );
+--- a/examples/d/x33d.d
++++ b/examples/d/x33d.d
+@@ -30,7 +30,7 @@ import plplot;
+ import std.math;
+ import std.string;
+
+-static PLINT position_options[16] = [
++static PLINT[16] position_options = [
+ PL_POSITION_LEFT | PL_POSITION_TOP | PL_POSITION_OUTSIDE,
+ PL_POSITION_TOP | PL_POSITION_OUTSIDE,
+ PL_POSITION_RIGHT | PL_POSITION_TOP | PL_POSITION_OUTSIDE,
+@@ -50,7 +50,7 @@ static PLINT position_options[16] = [
+ ];
+
+ // Pick 5 arbitrary UTF-8 symbols useful for plotting points (✠✚✱✪✽✺✰✴✦).
+-static string special_symbols[5] = [
++static string[5] special_symbols = [
+ "✰",
+ "✴",
+ "✱",
+@@ -61,14 +61,14 @@ static string special_symbols[5] = [
+ // plcolorbar options
+
+ // Colorbar type options
+-const int COLORBAR_KINDS = 4;
+-static PLINT colorbar_option_kinds[COLORBAR_KINDS] = [
++const int COLORBAR_KINDS = 4;
++static PLINT[COLORBAR_KINDS] colorbar_option_kinds = [
+ PL_COLORBAR_SHADE,
+ PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL,
+ PL_COLORBAR_IMAGE,
+ PL_COLORBAR_GRADIENT
+ ];
+-static string colorbar_option_kind_labels[COLORBAR_KINDS] = [
++static string[COLORBAR_KINDS] colorbar_option_kind_labels = [
+ "Shade colorbars",
+ "Shade colorbars with custom labels",
+ "Image colorbars",
+@@ -76,14 +76,14 @@ static string colorbar_option_kind_label
+ ];
+
+ // Which side of the page are we positioned relative to?
+-const int COLORBAR_POSITIONS = 4;
+-static PLINT colorbar_position_options[COLORBAR_POSITIONS] = [
++const int COLORBAR_POSITIONS = 4;
++static PLINT[COLORBAR_POSITIONS] colorbar_position_options = [
+ PL_POSITION_LEFT,
+ PL_POSITION_RIGHT,
+ PL_POSITION_TOP,
+ PL_POSITION_BOTTOM
+ ];
+-static string colorbar_position_option_labels[COLORBAR_POSITIONS] = [
++static string[COLORBAR_POSITIONS] colorbar_position_option_labels = [
+ "Left",
+ "Right",
+ "Top",
+@@ -91,14 +91,14 @@ static string colorbar_position_option_l
+ ];
+
+ // Colorbar label positioning options
+-const int COLORBAR_LABELS = 4;
+-static PLINT colorbar_label_options[COLORBAR_LABELS] = [
++const int COLORBAR_LABELS = 4;
++static PLINT[COLORBAR_LABELS] colorbar_label_options = [
+ PL_COLORBAR_LABEL_LEFT,
+ PL_COLORBAR_LABEL_RIGHT,
+ PL_COLORBAR_LABEL_TOP,
+ PL_COLORBAR_LABEL_BOTTOM
+ ];
+-static string colorbar_label_option_labels[COLORBAR_LABELS] = [
++static string[COLORBAR_LABELS] colorbar_label_option_labels = [
+ "Label left",
+ "Label right",
+ "Label top",
+@@ -106,14 +106,14 @@ static string colorbar_label_option_labe
+ ];
+
+ // Colorbar cap options
+-const int COLORBAR_CAPS = 4;
+-static PLINT colorbar_cap_options[COLORBAR_CAPS] = [
++const int COLORBAR_CAPS = 4;
++static PLINT[COLORBAR_CAPS] colorbar_cap_options = [
+ PL_COLORBAR_CAP_NONE,
+ PL_COLORBAR_CAP_LOW,
+ PL_COLORBAR_CAP_HIGH,
+ PL_COLORBAR_CAP_LOW | PL_COLORBAR_CAP_HIGH
+ ];
+-static string colorbar_cap_option_labels[COLORBAR_CAPS] = [
++static string[COLORBAR_CAPS] colorbar_cap_option_labels = [
+ "No caps",
+ "Low cap",
+ "High cap",
+@@ -126,20 +126,20 @@ void
+ plcolorbar_example_page( int kind_i, int label_i, int cap_i, PLINT cont_color, PLFLT cont_width, PLINT n_values, PLFLT [] values )
+ {
+ // Parameters for the colorbars on this page
+- PLINT position_i, position, opt;
+- PLFLT x, y, x_length, y_length;
+- PLFLT ticks[1] = [ 0.0 ];
+- PLINT sub_ticks[1] = [ 0 ];
++ PLINT position_i, position, opt;
++ PLFLT x, y, x_length, y_length;
++ PLFLT[1] ticks = [ 0.0 ];
++ PLINT[1] sub_ticks = [ 0 ];
+ PLFLT low_cap_color, high_cap_color;
+ PLINT vertical, ifn;
+ PLINT n_axes = 1;
+ string[] axis_opts;
+- PLINT n_labels = 1;
+- PLINT label_opts[1] = [ 0 ];
++ PLINT n_labels = 1;
++ PLINT[1] label_opts = [ 0 ];
+ string[] label;
+ string title;
+ PLFLT colorbar_width, colorbar_height;
+- PLINT n_values_array[1];
++ PLINT[1] n_values_array;
+ PLFLT[][] values_array;
+
+ axis_opts.length = 1;
+@@ -279,26 +279,26 @@ const int MAX_NLEGEND = 7;
+
+ int main( char[][] args )
+ {
+- int i, k;
+- PLINT opt;
+- PLINT nlegend, nturn;
+- PLINT opt_array[MAX_NLEGEND];
+- PLINT text_colors[MAX_NLEGEND];
+- PLINT box_colors[MAX_NLEGEND];
+- PLINT box_patterns[MAX_NLEGEND];
+- PLFLT box_scales[MAX_NLEGEND];
+- PLFLT box_line_widths[MAX_NLEGEND];
+- PLINT line_colors[MAX_NLEGEND];
+- PLINT line_styles[MAX_NLEGEND];
+- PLFLT line_widths[MAX_NLEGEND];
+- PLINT symbol_numbers[MAX_NLEGEND];
+- PLINT symbol_colors[MAX_NLEGEND];
+- PLFLT symbol_scales[MAX_NLEGEND];
+- string text[MAX_NLEGEND];
+- string symbols[MAX_NLEGEND];
+- PLFLT legend_width, legend_height, x, y, xstart, ystart;
+- PLFLT max_height, text_scale;
+- PLINT position, opt_base, nrow, ncolumn;
++ int i, k;
++ PLINT opt;
++ PLINT nlegend, nturn;
++ PLINT[MAX_NLEGEND] opt_array;
++ PLINT[MAX_NLEGEND] text_colors;
++ PLINT[MAX_NLEGEND] box_colors;
++ PLINT[MAX_NLEGEND] box_patterns;
++ PLFLT[MAX_NLEGEND] box_scales;
++ PLFLT[MAX_NLEGEND] box_line_widths;
++ PLINT[MAX_NLEGEND] line_colors;
++ PLINT[MAX_NLEGEND] line_styles;
++ PLFLT[MAX_NLEGEND] line_widths;
++ PLINT[MAX_NLEGEND] symbol_numbers;
++ PLINT[MAX_NLEGEND] symbol_colors;
++ PLFLT[MAX_NLEGEND] symbol_scales;
++ string[MAX_NLEGEND] text;
++ string[MAX_NLEGEND] symbols;
++ PLFLT legend_width, legend_height, x, y, xstart, ystart;
++ PLFLT max_height, text_scale;
++ PLINT position, opt_base, nrow, ncolumn;
+
+ // Parse and process command line arguments
+ plparseopts( args, PL_PARSE_FULL );
+@@ -822,9 +822,9 @@ int main( char[][] args )
+ if ( colorbar )
+ {
+ // Color bar examples
+- PLFLT values_small[2] = [ -1.0e-20, 1.0e-20 ];
+- PLFLT values_uneven[9] = [ -1.0e-20, 2.0e-20, 2.6e-20, 3.4e-20, 6.0e-20, 7.0e-20, 8.0e-20, 9.0e-20, 10.0e-20 ];
+- PLFLT values_even[9] = [ -2.0e-20, -1.0e-20, 0.0e-20, 1.0e-20, 2.0e-20, 3.0e-20, 4.0e-20, 5.0e-20, 6.0e-20 ];
++ PLFLT[2] values_small = [ -1.0e-20, 1.0e-20 ];
++ PLFLT[9] values_uneven = [ -1.0e-20, 2.0e-20, 2.6e-20, 3.4e-20, 6.0e-20, 7.0e-20, 8.0e-20, 9.0e-20, 10.0e-20 ];
++ PLFLT[9] values_even = [ -2.0e-20, -1.0e-20, 0.0e-20, 1.0e-20, 2.0e-20, 3.0e-20, 4.0e-20, 5.0e-20, 6.0e-20 ];
+
+ // Use unsaturated green background colour to contrast with black caps.
+ plscolbg( 70, 185, 70 );
diff --git a/sci-libs/plplot/plplot-5.15.0.ebuild b/sci-libs/plplot/plplot-5.15.0.ebuild
new file mode 100644
index 000000000000..bafe731a8d46
--- /dev/null
+++ b/sci-libs/plplot/plplot-5.15.0.ebuild
@@ -0,0 +1,288 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+WX_GTK_VER=3.0-gtk3
+FORTRAN_NEEDED=fortran
+PYTHON_COMPAT=( python3_{6,7,8} )
+
+inherit cmake-utils flag-o-matic fortran-2 java-pkg-opt-2 python-single-r1 toolchain-funcs virtualx wxwidgets
+
+DESCRIPTION="Multi-language scientific plotting library"
+HOMEPAGE="http://plplot.sourceforge.net/"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"
+
+LICENSE="LGPL-2"
+SLOT="0/14" # SONAME of libplplot.so
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+
+IUSE="cairo cxx doc +dynamic examples fortran gd java jpeg latex lua ocaml octave pdf
+ png python qhull qt5 shapefile svg tcl test threads tk truetype wxwidgets X"
+REQUIRED_USE="
+ python? ( ${PYTHON_REQUIRED_USE} )
+ qt5? ( dynamic )
+ test? ( latex )
+ tk? ( tcl )
+"
+
+RESTRICT="
+ !test? ( test )
+ octave? ( test )
+"
+
+RDEPEND="
+ cairo? ( x11-libs/cairo:0=[svg?,X] )
+ gd? ( media-libs/gd:2=[jpeg?,png?] )
+ java? ( >=virtual/jre-1.5:* )
+ latex? (
+ app-text/ghostscript-gpl
+ virtual/latex-base
+ )
+ lua? ( dev-lang/lua:0= )
+ ocaml? (
+ dev-lang/ocaml
+ dev-ml/camlidl
+ cairo? ( dev-ml/cairo-ocaml[gtk] )
+ )
+ octave? ( sci-mathematics/octave:0= )
+ pdf? ( media-libs/libharu:0= )
+ python? (
+ ${PYTHON_DEPS}
+ dev-python/numpy[${PYTHON_USEDEP}]
+ qt5? ( dev-python/PyQt5[${PYTHON_USEDEP}] )
+ )
+ qhull? ( media-libs/qhull:0= )
+ qt5? (
+ dev-qt/qtgui:5
+ dev-qt/qtsvg:5
+ dev-qt/qtprintsupport:5
+ )
+ shapefile? ( sci-libs/shapelib:0= )
+ tcl? (
+ dev-lang/tcl:0=
+ dev-tcltk/itcl:0=
+ tk? (
+ dev-lang/tk:0=
+ dev-tcltk/itk
+ )
+ )
+ truetype? (
+ media-fonts/freefont
+ media-libs/lasi:0=
+ gd? ( media-libs/gd:2=[truetype] )
+ )
+ wxwidgets? (
+ x11-libs/wxGTK:${WX_GTK_VER}=[X]
+ x11-libs/agg:0=[truetype?]
+ )
+ X? (
+ x11-libs/libX11:0=
+ x11-libs/libXau:0=
+ x11-libs/libXdmcp:0=
+ )"
+
+DEPEND="${RDEPEND}
+ virtual/pkgconfig
+ java? (
+ >=virtual/jdk-1.5
+ dev-lang/swig
+ )
+ ocaml? ( dev-ml/findlib )
+ octave? ( >=dev-lang/swig-3.0.12 )
+ python? ( dev-lang/swig )
+ test? (
+ media-fonts/font-misc-misc
+ media-fonts/font-cursor-misc
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-5.9.6-python.patch
+
+ # Fedora patches
+ "${FILESDIR}"/${PN}-5.15.0-ocaml-rpath.patch
+ "${FILESDIR}"/${PN}-5.15.0-ieee.patch
+ "${FILESDIR}"/${PN}-5.15.0-multiarch.patch
+ "${FILESDIR}"/${PN}-5.15.0-ocaml.patch
+ "${FILESDIR}"/${PN}-5.12.0-safe-string.patch
+)
+
+pkg_setup() {
+ use python && python-single-r1_pkg_setup
+ use java && java-pkg-opt-2_pkg_setup
+ use fortran && fortran-2_pkg_setup
+}
+
+src_prepare() {
+ use wxwidgets && need-wxwidgets unicode
+ cmake-utils_src_prepare
+
+ # avoid installing license
+ sed -i -e '/COPYING.LIB/d' CMakeLists.txt || die
+
+ # prexify hard-coded /usr/include in cmake modules
+ sed -i \
+ -e "s:/usr/include:${EPREFIX}/usr/include:g" \
+ -e "s:/usr/lib:${EPREFIX}/usr/$(get_libdir):g" \
+ -e "s:/usr/share:${EPREFIX}/usr/share:g" \
+ cmake/modules/*.cmake || die
+
+ # change default install directories for doc and examples
+ local f
+ while IFS="" read -d $'\0' -r f; do
+ sed -i -e 's:${DATA_DIR}/examples:${DOC_DIR}/examples:g' "${f}" || die
+ done < <(find "${S}" -name CMakeLists.txt -print0)
+
+ sed -i \
+ -e 's:${VERSION}::g' \
+ -e "s:doc/\${PACKAGE}:doc/${PF}:" \
+ cmake/modules/instdirs.cmake || die
+
+ java-utils-2_src_prepare
+}
+
+src_configure() {
+ # - don't build doc, it pulls in a whole stack of horrible dependencies
+ # - Bindings:
+ # * Ada is a mess in Gentoo, don't use
+ # * D has been removed from Gentoo, don't use
+ # * Qt4 has been disabled, as it is deprecated and unsupported upstream
+ # - DPLD_* drivers need to use ON/OFF instead of the usex defaults yes/no, as
+ # the testsuite performs a string comparison to determine which tests to run
+
+ # Octave bindings now require C++11 support, #609980
+ append-cxxflags -std=c++11
+
+ local mycmakeargs=(
+ # The build system does not honour CMAKE_INSTALL_LIBDIR as a
+ # relative dir, which is against the spirit of GNUInstallDirs, #610066
+ -DCMAKE_INSTALL_LIBDIR="${EPREFIX}"/usr/$(get_libdir)
+
+ ## Features
+ -DBUILD_DOC=OFF
+ -DBUILD_DOX_DOC=OFF
+ -DUSE_RPATH=OFF
+ -DPREBUILT_DOC=$(usex doc)
+ -DHAVE_SHAPELIB=$(usex shapefile)
+ -DWITH_FREETYPE=$(usex truetype)
+ -DPL_HAVE_PTHREAD=$(usex threads)
+ -DPL_HAVE_QHULL=$(usex qhull)
+ -DPLPLOT_USE_QT5=$(usex qt5)
+
+ ## Tests
+ -DBUILD_TEST=$(usex test)
+
+ ## Bindings
+ -DENABLE_ada=OFF
+ -DENABLE_d=OFF
+ -DENABLE_ocaml=$(usex ocaml)
+ -DENABLE_pyqt4=OFF
+ -DENABLE_cxx=$(usex cxx)
+ -DENABLE_DYNDRIVERS=$(usex dynamic)
+ -DENABLE_fortran=$(usex fortran)
+ -DENABLE_java=$(usex java)
+ -DENABLE_lua=$(usex lua)
+ -DENABLE_octave=$(usex octave)
+ -DENABLE_python=$(usex python)
+ -DENABLE_qt=$(usex qt5)
+ -DENABLE_tcl=$(usex tcl)
+ -DENABLE_itcl=$(usex tcl)
+ -DENABLE_tk=$(usex tk)
+ -DENABLE_itk=$(usex tk)
+ -DENABLE_wxwidgets=$(usex wxwidgets)
+
+ ## Drivers
+ -DPLD_cgm=OFF
+ -DPLD_gif=OFF
+ -DPLD_jpeg=OFF
+ -DPLD_plmeta=OFF
+ -DPLD_png=OFF
+ -DPLD_pstex=OFF
+ -DPLD_wxpng=OFF
+ -DPLD_mem=ON
+ -DPLD_null=ON
+ -DPLD_wingcc=ON
+ # Cairo
+ $(usex cairo "" "-DDEFAULT_NO_CAIRO_DEVICES=ON")
+ -DPLD_epscairo=$(usex cairo ON OFF)
+ -DPLD_extcairo=$(usex cairo ON OFF)
+ -DPLD_memcairo=$(usex cairo ON OFF)
+ -DPLD_pdfcairo=$(usex cairo ON OFF)
+ -DPLD_pngcairo=$(usex cairo ON OFF)
+ -DPLD_pscairo=$(usex cairo ON OFF)
+ -DPLD_svgcairo=$(usex cairo ON OFF)
+ -DPLD_xcairo=$(usex cairo ON OFF)
+ # LaTeX
+ -DPLD_ps=$(usex latex ON OFF)
+ # PDF
+ -DPLD_pdf=$(usex pdf ON OFF)
+ # Qt
+ -DPLD_aqt=$(usex qt5 ON OFF)
+ -DPLD_bmpqt=$(usex qt5 ON OFF)
+ -DPLD_epsqt=$(usex qt5 ON OFF)
+ -DPLD_extqt=$(usex qt5 ON OFF)
+ -DPLD_jpgqt=$(usex qt5 ON OFF)
+ -DPLD_memqt=$(usex qt5 ON OFF)
+ -DPLD_pdfqt=$(usex qt5 ON OFF)
+ -DPLD_pngqt=$(usex qt5 ON OFF)
+ -DPLD_ppmqt=$(usex qt5 ON OFF)
+ -DPLD_qtwidget=$(usex qt5 ON OFF)
+ -DPLD_svgqt=$(usex qt5 ON OFF)
+ -DPLD_tiffqt=$(usex qt5 ON OFF)
+ # SVG
+ -DPLD_svg=$(usex svg ON OFF)
+ # Tk
+ -DPLD_ntk=$(usex tk ON OFF)
+ -DPLD_tk=$(usex tk ON OFF)
+ -DPLD_tkwin=$(usex tk ON OFF)
+ # Truetype
+ -DPLD_psttf=$(usex truetype ON OFF)
+ # Wx
+ -DPLD_wxwidgets=$(usex wxwidgets ON OFF)
+ # X
+ -DPLD_xfig=$(usex X ON OFF)
+ -DPLD_xwin=$(usex X ON OFF)
+ )
+
+ use truetype && mycmakeargs+=(
+ -DPL_FREETYPE_FONT_PATH="${EPREFIX}"/usr/share/fonts/freefont
+ )
+ use shapefile && mycmakeargs+=(
+ -DSHAPELIB_INCLUDE_DIR="${EPREFIX}"/usr/include/libshp
+ )
+ use ocaml && mycmakeargs+=(
+ -DOCAML_INSTALL_DIR="$(ocamlc -where)"
+ )
+ use python && mycmakeargs+=(
+ -DENABLE_pyqt5=$(usex qt5)
+ )
+
+ cmake-utils_src_configure
+
+ # clean up bloated pkg-config files (help linking properly on prefix)
+ sed -i \
+ -e "/Cflags/s:-I\(${EPREFIX}\|\)/usr/include[[:space:]]::g" \
+ -e "/Libs/s:-L\(${EPREFIX}\|\)/usr/lib\(64\|\)[[:space:]]::g" \
+ -e "s:${LDFLAGS}::g" \
+ "${BUILD_DIR}"/pkgcfg/*pc || die
+}
+
+src_test() {
+ virtx cmake-utils_src_test
+}
+
+src_install() {
+ cmake-utils_src_install
+
+ if use examples; then
+ docompress -x /usr/share/doc/${PF}/examples
+ else
+ rm -r "${ED%/}"/usr/share/doc/${PF}/examples || die
+ fi
+
+ if use java; then
+ java-pkg_dojar "${BUILD_DIR}"/examples/java/${PN}.jar
+ java-pkg_regso "${EPREFIX}"/usr/$(get_libdir)/jni/plplotjavac_wrap.so
+ fi
+}