aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/mathgl
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/mathgl
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/mathgl')
-rw-r--r--vcpkg/ports/mathgl/cmake-config.patch39
-rw-r--r--vcpkg/ports/mathgl/cmake-project-include.cmake5
-rw-r--r--vcpkg/ports/mathgl/dependencies.patch118
-rw-r--r--vcpkg/ports/mathgl/enable-examples.patch14
-rw-r--r--vcpkg/ports/mathgl/fix-cross-builds.patch60
-rw-r--r--vcpkg/ports/mathgl/fix-examples.patch32
-rw-r--r--vcpkg/ports/mathgl/fix-format-specifiers.patch140
-rw-r--r--vcpkg/ports/mathgl/fix-glut.patch13
-rw-r--r--vcpkg/ports/mathgl/fix-include-property.patch14
-rw-r--r--vcpkg/ports/mathgl/fix-mgllab.patch13
-rw-r--r--vcpkg/ports/mathgl/fix_link_gsl.patch37
-rw-r--r--vcpkg/ports/mathgl/include_functional.patch12
-rw-r--r--vcpkg/ports/mathgl/linkage.patch187
-rw-r--r--vcpkg/ports/mathgl/portfile.cmake109
-rw-r--r--vcpkg/ports/mathgl/usage4
-rw-r--r--vcpkg/ports/mathgl/vcpkg.json137
16 files changed, 934 insertions, 0 deletions
diff --git a/vcpkg/ports/mathgl/cmake-config.patch b/vcpkg/ports/mathgl/cmake-config.patch
new file mode 100644
index 0000000..695e692
--- /dev/null
+++ b/vcpkg/ports/mathgl/cmake-config.patch
@@ -0,0 +1,39 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2a73d0f..fda5ba1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -51,6 +51,7 @@ endif()
+ set(MathGL_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
+ # Make relative paths absolute (needed later on)
+ foreach(p LIB BIN INCLUDE CMAKE)
++ break() # Absolute paths break config fixup for tools
+ set(var MathGL_INSTALL_${p}_DIR)
+ if(NOT IS_ABSOLUTE "${${var}}")
+ set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
+diff --git a/scripts/MathGLConfig.cmake.in b/scripts/MathGLConfig.cmake.in
+index f219126..2a9f58b 100644
+--- a/scripts/MathGLConfig.cmake.in
++++ b/scripts/MathGLConfig.cmake.in
+@@ -1,15 +1,19 @@
+ # - Config file for the MathGL package
+ # It defines the following variables
+
+-set(MathGL2_INCLUDE_DIRS "@MathGL_INSTALL_INCLUDE_DIR@")
+-set(MathGL2_LIBRARIES_DIRS "@MathGL_INSTALL_LIB_DIR@")
++set(MathGL2_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/@MathGL_INSTALL_INCLUDE_DIR@")
++if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
++ set(MathGL2_LIBRARIES_DIRS "@CMAKE_INSTALL_PREFIX@/debug/@MathGL_INSTALL_LIB_DIR@")
++else()
++ set(MathGL2_LIBRARIES_DIRS "@CMAKE_INSTALL_PREFIX@/@MathGL_INSTALL_LIB_DIR@")
++endif()
+ set(MathGL2_HAVE_QT5 "@enable-qt5@")
+ set(MathGL2_HAVE_QT4 "@enable-qt4@")
+ set(MathGL2_HAVE_WX "@enable-wx@")
+ set(MathGL2_HAVE_FLTK "@enable-fltk@")
+ set(MathGL2_HAVE_GLUT "@enable-glut@")
+ set(MathGL2_HAVE_PTHREAD "@CMAKE_USE_PTHREADS_INIT@")
+-set(MathGL2_HAVE_OPENMP "@OPENMP_FOUND@")
++set(MathGL2_HAVE_OPENMP "@enable-openmp@")
+
+ include(CMakeFindDependencyMacro)
+ # Adding dependency for Threads imported target
diff --git a/vcpkg/ports/mathgl/cmake-project-include.cmake b/vcpkg/ports/mathgl/cmake-project-include.cmake
new file mode 100644
index 0000000..c0e96a0
--- /dev/null
+++ b/vcpkg/ports/mathgl/cmake-project-include.cmake
@@ -0,0 +1,5 @@
+if(WIN32 AND NOT MINGW)
+ find_package(unofficial-getopt-win32 REQUIRED)
+ set(getopt_lib-static unofficial::getopt-win32::getopt)
+ set(MGL_HAVE_GETOPT 1 CACHE INTERNAL "From vcpkg")
+endif()
diff --git a/vcpkg/ports/mathgl/dependencies.patch b/vcpkg/ports/mathgl/dependencies.patch
new file mode 100644
index 0000000..f8763bc
--- /dev/null
+++ b/vcpkg/ports/mathgl/dependencies.patch
@@ -0,0 +1,118 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 466e9bc..d99c1e4 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -441,9 +441,10 @@ else(enable-pthr-widget OR enable-pthread)
+ endif(enable-pthr-widget OR enable-pthread)
+
+ if(enable-arma)
+- find_package(Armadillo)
++ find_package(Armadillo CONFIG REQUIRED)
+ if(ARMADILLO_FOUND)
+ set(MGL_HAVE_ARMA 1)
++ list(APPEND MGL_DEP_LIBS armadillo)
+ else(ARMADILLO_FOUND)
+ set(MGL_HAVE_ARMA 0)
+ endif(ARMADILLO_FOUND)
+@@ -548,7 +549,7 @@ endif(enable-hdf5)
+
+ if(enable-jpeg)
+ set(MGL_HAVE_JPEG 1)
+- include(FindJPEG)
++ find_package(JPEG)
+ if(NOT JPEG_FOUND)
+ message(SEND_ERROR "Couldn't find JPEG library.")
+ endif(NOT JPEG_FOUND)
+@@ -561,7 +562,7 @@ endif(enable-jpeg)
+
+ if(enable-zlib)
+ set(MGL_HAVE_ZLIB 1)
+- include(FindZLIB)
++ find_package(ZLIB)
+ if(NOT ZLIB_FOUND)
+ message(SEND_ERROR "Couldn't find ZLib library.")
+ endif(NOT ZLIB_FOUND)
+@@ -573,7 +574,7 @@ endif(enable-zlib)
+
+ if(enable-freetype)
+ set(MGL_HAVE_FREETYPE 1)
+- include(FindFreetype)
++ find_package(Freetype)
+ if(NOT FREETYPE_FOUND)
+ message(SEND_ERROR "Couldn't find FreeType library.")
+ endif(NOT FREETYPE_FOUND)
+@@ -588,7 +589,7 @@ if(enable-png)
+ if(NOT MGL_HAVE_ZLIB)
+ message(SEND_ERROR "You have to enable ZLib if you plan to use PNG export.")
+ endif(NOT MGL_HAVE_ZLIB)
+- include(FindPNG)
++ find_package(PNG)
+ if(NOT PNG_FOUND)
+ message(SEND_ERROR "Couldn't find PNG library.")
+ endif(NOT PNG_FOUND)
+@@ -620,7 +621,7 @@ endif(enable-pdf)
+
+ if(enable-gif)
+ set(MGL_HAVE_GIF 1)
+- include(FindGIF)
++ find_package(GIF)
+ if(NOT GIF_FOUND)
+ message(SEND_ERROR "Couldn't find GIF library.")
+ endif(NOT GIF_FOUND)
+@@ -633,7 +634,7 @@ endif(enable-gif)
+ if(enable-opengl)
+ set(MGL_HAVE_OPENGL 1)
+ set(OpenGL_GL_PREFERENCE LEGACY)
+- include(FindOpenGL)
++ find_package(OpenGL)
+ if(NOT OPENGL_FOUND)
+ message(SEND_ERROR "Couldn't find OpenGL libraries.")
+ endif(NOT OPENGL_FOUND)
+@@ -648,7 +649,7 @@ if(enable-glut)
+ if(NOT MGL_HAVE_OPENGL)
+ message(SEND_ERROR "You have to enable OpenGL if you plan to use GLUT.")
+ endif(NOT MGL_HAVE_OPENGL)
+- include(FindGLUT)
++ find_package(GLUT REQUIRED)
+ if(NOT GLUT_FOUND)
+ message(SEND_ERROR "Couldn't find GLUT library.")
+ endif(NOT GLUT_FOUND)
+@@ -658,14 +659,19 @@ endif(enable-glut)
+
+ if(enable-fltk)
+ set(MGL_HAVE_FLTK 1)
+- FIND_PACKAGE(FLTK)
++ find_package(FLTK CONFIG)
++ set(FLTK_LIBRARIES fltk)
+ if(NOT FLTK_FOUND)
+ message(SEND_ERROR "Couldn't find FLTK library.")
+ else(NOT FLTK_FOUND)
+- include_directories(${FLTK_INCLUDE_DIR})
++ set(FLTK_LIBRARIES fltk)
++ include(CMakePushCheckState)
++ cmake_push_check_state()
++ list(APPEND CMAKE_REQUIRED_LIBRARIES ${FLTK_LIBRARIES})
+ CHECK_CXX_SOURCE_COMPILES(
+ "#include <FL/Fl_Copy_Surface.H>
+ int main(){return 0;}" MGL_HAVE_FL_COPY)
++ cmake_pop_check_state()
+ endif(NOT FLTK_FOUND)
+ if(NOT MGL_HAVE_FL_COPY)
+ set(MGL_HAVE_FL_COPY 0)
+diff --git a/scripts/MathGLConfig.cmake.in b/scripts/MathGLConfig.cmake.in
+index 78bad89..0c2e5ed 100644
+--- a/scripts/MathGLConfig.cmake.in
++++ b/scripts/MathGLConfig.cmake.in
+@@ -25,6 +25,12 @@ endif()
+ if (MathGL2_HAVE_OPENMP STRGREATER "")
+ find_dependency(OpenMP)
+ endif()
++if("@enable-arma@")
++ find_dependency(Armadillo CONFIG)
++endif()
++if(MathGL2_HAVE_FLTK)
++ find_dependency(FLTK CONFIG)
++endif()
+
+ # Compute paths
+ get_filename_component(MathGL2_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
diff --git a/vcpkg/ports/mathgl/enable-examples.patch b/vcpkg/ports/mathgl/enable-examples.patch
new file mode 100644
index 0000000..ff809bf
--- /dev/null
+++ b/vcpkg/ports/mathgl/enable-examples.patch
@@ -0,0 +1,14 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b393fa7..8a1ce4b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -838,7 +838,9 @@ if(NOT enable-lgpl)
+ add_subdirectory( lang )
+ endif(enable-python OR enable-lua OR enable-octave)
+ add_subdirectory( utils )
++if(enable-examples)
+ add_subdirectory( examples )
++endif()
+ if(NOT WIN32)
+ add_subdirectory( fonts )
+ endif(NOT WIN32)
diff --git a/vcpkg/ports/mathgl/fix-cross-builds.patch b/vcpkg/ports/mathgl/fix-cross-builds.patch
new file mode 100644
index 0000000..36f3ae2
--- /dev/null
+++ b/vcpkg/ports/mathgl/fix-cross-builds.patch
@@ -0,0 +1,60 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8a1ce4b..71d07bf 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -842,8 +842,9 @@ if(enable-examples)
+ add_subdirectory( examples )
+ endif()
+ if(NOT WIN32)
+- add_subdirectory( fonts )
++ set(INSTALL_FONTS 1)
+ endif(NOT WIN32)
++add_subdirectory( fonts )
+ add_subdirectory( mgllab )
+ endif(NOT enable-lgpl)
+
+diff --git a/fonts/CMakeLists.txt b/fonts/CMakeLists.txt
+index f529c18..aba1bc3 100644
+--- a/fonts/CMakeLists.txt
++++ b/fonts/CMakeLists.txt
+@@ -1,8 +1,20 @@
++if(MAKE_BIN_EXECUTABLE)
++ add_executable(make_bin IMPORTED)
++ set_target_properties(make_bin PROPERTIES IMPORTED_LOCATION "${MAKE_BIN_EXECUTABLE}")
++else()
++ add_executable(make_bin make_bin.cpp)
++ target_link_libraries(make_bin mgl${link_type} ${getopt_lib-static})
++ install(TARGETS make_bin RUNTIME DESTINATION bin)
++endif()
++if(NOT INSTALL_FONTS)
++ return()
++elseif(0)
+ include_directories( ${MathGL2_SOURCE_DIR}/include ${MathGL2_BINARY_DIR}/include)
+ set(hdrF ../include/mgl2/font.h ../include/mgl2/define.h ${MathGL2_BINARY_DIR}/include/mgl2/config.h)
+ add_executable(make_bin make_bin.cpp ../src/font.cpp ${hdrF})
+ #target_link_libraries(make_bin mgl-static ${getopt_lib-static})
+ target_link_libraries(make_bin ${MGL_DEP_LIBS})
++endif()
+
+ set(MGL_FONTS STIX adventor bonum cursor heroscn heros pagella schola termes)
+ set(MGL_FONTS_BIN )
+diff --git a/fonts/make_bin.cpp b/fonts/make_bin.cpp
+index 73d0adb..e0158be 100644
+--- a/fonts/make_bin.cpp
++++ b/fonts/make_bin.cpp
+@@ -20,6 +20,7 @@
+ #include <getopt.h>
+ #include "mgl2/font.h"
+ //-----------------------------------------------------------------------------
++#if 0 // vcpkg links to mgl lib
+ extern mglFont *mglDefFont;
+ void mgl_init() // TODO try to add ld option: "-init mgl_init"
+ {
+@@ -30,6 +31,7 @@ void mgl_init() // TODO try to add ld option: "-init mgl_init"
+ mglDefFont = new mglFont(MGL_DEF_FONT_NAME);
+ }
+ }
++#endif
+ int main(int argc, char *argv[])
+ {
+ mglFont fnt;
diff --git a/vcpkg/ports/mathgl/fix-examples.patch b/vcpkg/ports/mathgl/fix-examples.patch
new file mode 100644
index 0000000..87ce03f
--- /dev/null
+++ b/vcpkg/ports/mathgl/fix-examples.patch
@@ -0,0 +1,32 @@
+diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
+index cd389bd..56ad515 100644
+--- a/examples/CMakeLists.txt
++++ b/examples/CMakeLists.txt
+@@ -26,7 +26,7 @@ endif(MGL_HAVE_GLUT)
+
+ if(MGL_HAVE_WX)
+ include(${wxWidgets_USE_FILE})
+- add_executable(mgl_wx_example wnd_samples.cpp wx_example.cpp)
++ add_executable(mgl_wx_example WIN32 wnd_samples.cpp wx_example.cpp)
+ target_link_libraries(mgl_wx_example mgl-wx${link_type})
+ endif(MGL_HAVE_WX)
+
+diff --git a/examples/full_test.cpp b/examples/full_test.cpp
+index 50fb6ae..6f3ef26 100644
+--- a/examples/full_test.cpp
++++ b/examples/full_test.cpp
+@@ -21,6 +21,14 @@
+ #include <locale.h>
+ #include <time.h>
+ #include <getopt.h>
++#if defined(_UNICODE) && defined(getopt_long_only)
++#undef getopt_long_only
++#undef option
++#undef optarg
++#define getopt_long_only getopt_long_only_a
++#define option option_a
++#define optarg optarg_a
++#endif
+ #ifdef WIN32
+ #include <io.h>
+ #include <direct.h>
diff --git a/vcpkg/ports/mathgl/fix-format-specifiers.patch b/vcpkg/ports/mathgl/fix-format-specifiers.patch
new file mode 100644
index 0000000..cd7b782
--- /dev/null
+++ b/vcpkg/ports/mathgl/fix-format-specifiers.patch
@@ -0,0 +1,140 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a560278..3184d2c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -239,6 +239,11 @@ if(MSVC AND MSVC_VERSION GREATER 1899)
+ SET(CMAKE_CXX_FLAGS "/EHsc -D_CRT_STDIO_ISO_WIDE_SPECIFIERS ${CMAKE_CXX_FLAGS}")
+ SET(CMAKE_C_FLAGS "-D_CRT_STDIO_ISO_WIDE_SPECIFIERS ${CMAKE_C_FLAGS}")
+ endif(MSVC AND MSVC_VERSION GREATER 1899)
++# _CRT_STDIO_ISO_WIDE_SPECIFIERS was never officially supported
++# and breaks link mathgl widget libs against their GUI libs:
++# error LNK2038: mismatch detected for '_CRT_STDIO_ISO_WIDE_SPECIFIERS': value '0' doesn't match value '1' in fltk.cpp.obj
++string(REPLACE "-D_CRT_STDIO_ISO_WIDE_SPECIFIERS" "-DVCPKG_MSVC_WPRINTF" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
++string(REPLACE "-D_CRT_STDIO_ISO_WIDE_SPECIFIERS" "-DVCPKG_MSVC_WPRINTF" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+ include(CheckCXXSourceCompiles)
+
+diff --git a/src/export_2d.cpp b/src/export_2d.cpp
+index bd07404..65f5fdf 100644
+--- a/src/export_2d.cpp
++++ b/src/export_2d.cpp
+@@ -17,6 +17,13 @@
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
++// wprintf format specifier for char*.
++// Inject by replacing (wprintf.*?[^"])" PERCENT_S " with $1" PERCENT_S "
++#ifdef VCPKG_MSVC_WPRINTF
++#define PERCENT_S "%S"
++#else
++#define PERCENT_S "%s"
++#endif
+ #include "mgl2/canvas.h"
+ #include "mgl2/canvas_cf.h"
+ #include "mgl2/font.h"
+@@ -661,7 +668,7 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
+ FILE *fp = fopen(fname,"w");
+ if(!fp) { gr->SetWarn(mglWarnOpen,fname); return; }
+ const std::string loc = setlocale(LC_NUMERIC, "C"); fwide(fp,1);
+- fwprintf(fp, L"%% Created by MathGL library\n%% Title: %s\n\n",descr?descr:fname);
++ fwprintf(fp, L"%% Created by MathGL library\n%% Title: " PERCENT_S "\n\n",descr?descr:fname);
+ // provide marks
+ fwprintf(fp, L"\\providecommand{\\mglp}[4]{\\draw[#3] (#1-#4, #2) -- (#1+#4,#2) (#1,#2-#4) -- (#1,#2+#4);}\n");
+ fwprintf(fp, L"\\providecommand{\\mglx}[4]{\\draw[#3] (#1-#4, #2-#4) -- (#1+#4,#2+#4) (#1+#4,#2-#4) -- (#1-#4,#2+#4);}\n");
+@@ -707,47 +714,47 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
+ switch(q.n4) // NOTE: no thickness for marks in TeX
+ {
+ case 'P':
+- fwprintf(fp, L"\\mglp{%.4g}{%.4g}{%s}{%.4g} \\mgls{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s,x,y,cname,s); break;
++ fwprintf(fp, L"\\mglp{%.4g}{%.4g}{" PERCENT_S "}{%.4g} \\mgls{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s,x,y,cname,s); break;
+ case 'X':
+- fwprintf(fp, L"\\mglx{%.4g}{%.4g}{%s}{%.4g} \\mgls{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s,x,y,cname,s); break;
++ fwprintf(fp, L"\\mglx{%.4g}{%.4g}{" PERCENT_S "}{%.4g} \\mgls{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s,x,y,cname,s); break;
+ case 'C':
+- fwprintf(fp, L"\\mglc{%.4g}{%.4g}{%s}{%.4g} \\mglo{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s,x,y,cname,s); break;
+- case '+': fwprintf(fp, L"\\mglp{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'x': fwprintf(fp, L"\\mglx{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 's': fwprintf(fp, L"\\mgls{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'S': fwprintf(fp, L"\\mglS{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'd': fwprintf(fp, L"\\mgld{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'D': fwprintf(fp, L"\\mglD{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case '^': fwprintf(fp, L"\\mglt{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'T': fwprintf(fp, L"\\mglT{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'v': fwprintf(fp, L"\\mglv{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'V': fwprintf(fp, L"\\mglV{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case '<': fwprintf(fp, L"\\mgll{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'L': fwprintf(fp, L"\\mglL{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case '>': fwprintf(fp, L"\\mglr{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'R': fwprintf(fp, L"\\mglR{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'Y': fwprintf(fp, L"\\mglY{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'o': fwprintf(fp, L"\\mglo{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case 'O': fwprintf(fp, L"\\mglO{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- case '*': fwprintf(fp, L"\\mgla{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s); break;
+- default: fwprintf(fp, L"\\mglc{%.4g}{%.4g}{%s}\n", x,y,cname); break;
++ fwprintf(fp, L"\\mglc{%.4g}{%.4g}{" PERCENT_S "}{%.4g} \\mglo{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s,x,y,cname,s); break;
++ case '+': fwprintf(fp, L"\\mglp{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'x': fwprintf(fp, L"\\mglx{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 's': fwprintf(fp, L"\\mgls{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'S': fwprintf(fp, L"\\mglS{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'd': fwprintf(fp, L"\\mgld{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'D': fwprintf(fp, L"\\mglD{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case '^': fwprintf(fp, L"\\mglt{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'T': fwprintf(fp, L"\\mglT{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'v': fwprintf(fp, L"\\mglv{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'V': fwprintf(fp, L"\\mglV{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case '<': fwprintf(fp, L"\\mgll{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'L': fwprintf(fp, L"\\mglL{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case '>': fwprintf(fp, L"\\mglr{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'R': fwprintf(fp, L"\\mglR{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'Y': fwprintf(fp, L"\\mglY{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'o': fwprintf(fp, L"\\mglo{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case 'O': fwprintf(fp, L"\\mglO{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ case '*': fwprintf(fp, L"\\mgla{%.4g}{%.4g}{" PERCENT_S "}{%.4g}\n", x,y,cname,s); break;
++ default: fwprintf(fp, L"\\mglc{%.4g}{%.4g}{" PERCENT_S "}\n", x,y,cname); break;
+ }
+ }
+ else if(q.type==2 && cp.r[3])
+ {
+ const mglPnt &p2=gr->GetPnt(q.n2), &p3=gr->GetPnt(q.n3);
+ if(cp.r[3]<255)
+- fwprintf(fp, L"\\fill[%s, fill opacity=%.4g] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100);
++ fwprintf(fp, L"\\fill[" PERCENT_S ", fill opacity=%.4g] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100);
+ else
+- fwprintf(fp, L"\\fill[%s, fill] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname, x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100);
++ fwprintf(fp, L"\\fill[" PERCENT_S ", fill] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname, x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100);
+ }
+ else if(q.type==3 && cp.r[3])
+ {
+ const mglPnt &p2=gr->GetPnt(q.n2), &p3=gr->GetPnt(q.n3), &p4=gr->GetPnt(q.n4);
+ if(cp.r[3]<255)
+- fwprintf(fp, L"\\fill[%s, fill opacity=%.4g] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100);
++ fwprintf(fp, L"\\fill[" PERCENT_S ", fill opacity=%.4g] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100);
+ else
+- fwprintf(fp, L"\\fill[%s, fill] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname, x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100);
++ fwprintf(fp, L"\\fill[" PERCENT_S ", fill] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname, x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100);
+
+ }
+ else if(q.type==1) // lines
+@@ -755,8 +762,8 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
+ //const char *dash[]={"", "8 8","4 4","1 3","7 4 1 4","3 2 1 2"};
+ const char *w[]={"semithick","thick","very thick","ultra thick"};
+ int iw=int(q.w-0.5); if(iw>3) iw=3;
+- if(iw<0) fwprintf(fp,L"\\draw[%s] ",cname);
+- else fwprintf(fp,L"\\draw[%s,%s] ",cname,w[iw]);
++ if(iw<0) fwprintf(fp,L"\\draw[" PERCENT_S "] ",cname);
++ else fwprintf(fp,L"\\draw[" PERCENT_S "," PERCENT_S "] ",cname,w[iw]);
+ // TODO: add line dashing
+ wp = q.w>1 ? q.w:1; st = q.n3;
+ std::vector<long> ids = put_line(gr,i,wp,cp.c,st);
+@@ -780,9 +787,9 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
+ // if(f&MGL_FONT_ITAL) ss.append(",font=\\itshape");
+ // if(f&MGL_FONT_BOLD) ss.append(",font=\\bfshape");
+ if(t.text.find('\\')!=std::string::npos || t.text.find('{')!=std::string::npos || t.text.find('_')!=std::string::npos || t.text.find('^')!=std::string::npos)
+- fwprintf(fp,L"\\draw[%s] (%.4g,%.4g) node[rotate=%.2g]{$%ls$};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
++ fwprintf(fp,L"\\draw[" PERCENT_S "] (%.4g,%.4g) node[rotate=%.2g]{$%ls$};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
+ else
+- fwprintf(fp,L"\\draw[%s] (%.4g,%.4g) node[rotate=%.2g]{%ls};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
++ fwprintf(fp,L"\\draw[" PERCENT_S "] (%.4g,%.4g) node[rotate=%.2g]{%ls};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
+ }
+ }
+ fwprintf(fp, L"\\end{tikzpicture}\n");
diff --git a/vcpkg/ports/mathgl/fix-glut.patch b/vcpkg/ports/mathgl/fix-glut.patch
new file mode 100644
index 0000000..6acac1c
--- /dev/null
+++ b/vcpkg/ports/mathgl/fix-glut.patch
@@ -0,0 +1,13 @@
+diff --git a/widgets/glut.cpp b/widgets/glut.cpp
+index eca65db..6a4641d 100644
+--- a/widgets/glut.cpp
++++ b/widgets/glut.cpp
+@@ -27,7 +27,7 @@
+ #if defined(_MSC_VER) || defined(__BORLANDC__)
+ #include <windows.h>
+ #include <GL/gl.h>
+- #include "glut.h"
++ #include <GL/glut.h>
+ #else
+ #include <GL/gl.h>
+ #include <GL/glut.h>
diff --git a/vcpkg/ports/mathgl/fix-include-property.patch b/vcpkg/ports/mathgl/fix-include-property.patch
new file mode 100644
index 0000000..1c15d38
--- /dev/null
+++ b/vcpkg/ports/mathgl/fix-include-property.patch
@@ -0,0 +1,14 @@
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index d44125c..1ad17a1 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -53,6 +53,9 @@ generate_export_header(mgl EXPORT_FILE_NAME ../include/mgl2/dllexport.h)
+ target_link_libraries(mgl ${MGL_DEP_LIBS})
+ target_link_libraries(mgl-static ${MGL_DEP_LIBS})
+
++target_include_directories(mgl PUBLIC $<INSTALL_INTERFACE:include>)
++target_include_directories(mgl-static PUBLIC $<INSTALL_INTERFACE:include>)
++
+ mgl_po_src(${mgl_src} ${mgl_hdr})
+
+ if(MGL_HAVE_MPI)
diff --git a/vcpkg/ports/mathgl/fix-mgllab.patch b/vcpkg/ports/mathgl/fix-mgllab.patch
new file mode 100644
index 0000000..23376fd
--- /dev/null
+++ b/vcpkg/ports/mathgl/fix-mgllab.patch
@@ -0,0 +1,13 @@
+diff --git a/mgllab/mgllab.cpp b/mgllab/mgllab.cpp
+index ef2d556..36fbfc4 100644
+--- a/mgllab/mgllab.cpp
++++ b/mgllab/mgllab.cpp
+@@ -344,7 +344,7 @@ Fl_Menu_Item menuitems[] = {
+ void mem_upd_cb(Fl_Widget *, void *v)
+ { ((ScriptWindow*)v)->mem_init(); }
+ //-----------------------------------------------------------------------------
+-extern Fl_RGB_Image img_udav;
++extern MGL_EXPORT Fl_RGB_Image img_udav;
+ ScriptWindow *new_view()
+ {
+ Fl_Group *gg;
diff --git a/vcpkg/ports/mathgl/fix_link_gsl.patch b/vcpkg/ports/mathgl/fix_link_gsl.patch
new file mode 100644
index 0000000..7715f80
--- /dev/null
+++ b/vcpkg/ports/mathgl/fix_link_gsl.patch
@@ -0,0 +1,37 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1c931e2..4987f2d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -485,25 +485,13 @@ endif(enable-openmp)
+
+ if(enable-gsl)
+ set(MGL_HAVE_GSL 1)
+- find_library(GSL_LIB gsl)
+- find_library(GSL_CBLAS_LIB gslcblas)
+- find_path(GSL_INCLUDE_DIR gsl/gsl_fft_complex.h)
+- if(NOT GSL_LIB OR NOT GSL_CBLAS_LIB OR NOT GSL_INCLUDE_DIR)
+- message(SEND_ERROR "${GSL_LIB}")
+- message(SEND_ERROR "${GSL_CBLAS_LIB}")
+- message(SEND_ERROR "${GSL_INCLUDE_DIR}")
+- message(SEND_ERROR "Couldn't find GSL libraries.")
+- else(NOT GSL_LIB OR NOT GSL_CBLAS_LIB OR NOT GSL_INCLUDE_DIR)
+- set(CMAKE_REQUIRED_INCLUDES ${GSL_INCLUDE_DIR})
+- set(CMAKE_REQUIRED_LIBRARIES ${GSL_LIB} ${GSL_CBLAS_LIB})
+- CHECK_CXX_SOURCE_COMPILES("#include <gsl/gsl_multifit_nlin.h>
+- int main(){gsl_multifit_fdfsolver *s=0;gsl_matrix *J = 0;
+- gsl_multifit_fdfsolver_jac(s, J);}" MGL_HAVE_GSL2)
+- unset(CMAKE_REQUIRED_INCLUDES)
+- unset(CMAKE_REQUIRED_LIBRARIES)
+- endif(NOT GSL_LIB OR NOT GSL_CBLAS_LIB OR NOT GSL_INCLUDE_DIR)
+- set(MGL_DEP_LIBS ${GSL_LIB} ${GSL_CBLAS_LIB} ${MGL_DEP_LIBS})
+- include_directories(${GSL_INCLUDE_DIR})
++ find_package(GSL REQUIRED)
++ set(MGL_DEP_LIBS GSL::gsl GSL::gslcblas ${MGL_DEP_LIBS})
++ set(CMAKE_REQUIRED_LIBRARIES GSL::gsl GSL::gslcblas)
++ CHECK_CXX_SOURCE_COMPILES("#include <gsl/gsl_multifit_nlin.h>
++ int main(){gsl_multifit_fdfsolver *s=0;gsl_matrix *J = 0;
++ gsl_multifit_fdfsolver_jac(s, J);}" MGL_HAVE_GSL2)
++ unset(CMAKE_REQUIRED_LIBRARIES)
+ else(enable-gsl)
+ set(MGL_HAVE_GSL 0)
+ endif(enable-gsl)
diff --git a/vcpkg/ports/mathgl/include_functional.patch b/vcpkg/ports/mathgl/include_functional.patch
new file mode 100644
index 0000000..1b7a2b7
--- /dev/null
+++ b/vcpkg/ports/mathgl/include_functional.patch
@@ -0,0 +1,12 @@
+diff --git a/src/prc/writePRC.h b/src/prc/writePRC.h
+index d0b4e0e..3bc68ea 100644
+--- a/src/prc/writePRC.h
++++ b/src/prc/writePRC.h
+@@ -31,6 +31,7 @@
+ #include "PRC.h"
+ #include <float.h>
+ #include <math.h>
++#include <functional>
+
+ static const uint32_t m1=(uint32_t)-1;
+ static const double pi=acos(-1.0);
diff --git a/vcpkg/ports/mathgl/linkage.patch b/vcpkg/ports/mathgl/linkage.patch
new file mode 100644
index 0000000..e63971f
--- /dev/null
+++ b/vcpkg/ports/mathgl/linkage.patch
@@ -0,0 +1,187 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a316984..920a099 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -71,6 +71,14 @@ macro(mgl_po_src)
+ set(po_files ${po_files} ${l_files} PARENT_SCOPE)
+ endmacro(mgl_po_src)
+
++if(BUILD_SHARED_LIBS)
++ set(link_type "")
++ set(excluded_type "-static")
++else()
++ set(link_type "-static")
++ set(excluded_type "")
++endif()
++
+ function(mgl_add_lib mgl_tmp_lib)
+ if(${mgl_tmp_lib} MATCHES mgl)
+ set(mgllib mgl)
+@@ -113,8 +121,10 @@ function(mgl_add_lib mgl_tmp_lib)
+ set_target_properties(${mgllib}-static PROPERTIES OUTPUT_NAME "${mgllib}${mgl_lib_static}${mgl_lib_end}")
+ endif(enable-mgl2)
+
++ target_compile_definitions(${mgllib} PRIVATE BUILDING_${mgllib}_LIB)
++ set_target_properties(${mgllib}${excluded_type} PROPERTIES EXCLUDE_FROM_ALL 1)
+ install(
+- TARGETS ${mgllib} ${mgllib}-static
++ TARGETS ${mgllib}${link_type}
+ EXPORT MathGLTargets
+ RUNTIME DESTINATION ${MathGL_INSTALL_BIN_DIR}
+ ARCHIVE DESTINATION ${MathGL_INSTALL_LIB_DIR}
+diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
+index 0263910..186d95b 100644
+--- a/examples/CMakeLists.txt
++++ b/examples/CMakeLists.txt
+@@ -4,7 +4,7 @@ file(COPY ${CMAKE_SOURCE_DIR}/examples/Equirectangular-projection.jpg DESTINATIO
+ file(COPY ${CMAKE_SOURCE_DIR}/examples/samples.cpp DESTINATION ${CMAKE_BINARY_DIR}/examples)
+ file(COPY ${CMAKE_SOURCE_DIR}/examples/wnd_samples.cpp DESTINATION ${CMAKE_BINARY_DIR}/examples)
+ add_executable(mgl_example wnd_samples.cpp full_test.cpp samples.cpp)
+-target_link_libraries(mgl_example mgl-static ${getopt_lib-static})
++target_link_libraries(mgl_example mgl${link_type} ${getopt_lib-static})
+ if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND CMAKE_COMPILER_IS_GNUCXX AND enable-lcov)
+ setup_target_for_coverage(
+ NAME mgl_coverage
+@@ -16,25 +16,25 @@ endif(CMAKE_BUILD_TYPE STREQUAL "Debug" AND CMAKE_COMPILER_IS_GNUCXX AND enable-
+ if(MGL_HAVE_FLTK)
+ include_directories(${FLTK_INCLUDE_DIR})
+ add_executable(mgl_fltk_example wnd_samples.cpp fltk_example.cpp)
+- target_link_libraries(mgl_fltk_example mgl-fltk)
++ target_link_libraries(mgl_fltk_example mgl-fltk${link_type})
+ endif(MGL_HAVE_FLTK)
+
+ if(MGL_HAVE_GLUT)
+ add_executable(mgl_glut_example wnd_samples.cpp glut_example.cpp)
+- target_link_libraries(mgl_glut_example mgl-glut)
++ target_link_libraries(mgl_glut_example mgl-glut${link_type})
+ endif(MGL_HAVE_GLUT)
+
+ if(MGL_HAVE_WX)
+ include(${wxWidgets_USE_FILE})
+ add_executable(mgl_wx_example wnd_samples.cpp wx_example.cpp)
+- target_link_libraries(mgl_wx_example mgl-wx)
++ target_link_libraries(mgl_wx_example mgl-wx${link_type})
+ endif(MGL_HAVE_WX)
+
+ if(QT_ENABLED)
+ add_executable(mgl_qt_example wnd_samples.cpp qt_example.cpp)
+ if(enable-qt5)
+ include(../scripts/qt5.cmake)
+- target_link_libraries(mgl_qt_example mgl-qt5)
++ target_link_libraries(mgl_qt_example mgl-qt5${link_type})
+ else(enable-qt5)
+ include(../scripts/qt4.cmake)
+ target_link_libraries(mgl_qt_example mgl-qt4)
+@@ -43,7 +43,7 @@ if(QT_ENABLED)
+ if(MGL_HAVE_OPENGL)
+ add_executable(mgl_qgl_example wnd_samples.cpp qgl_example.cpp)
+ if(enable-qt5)
+- target_link_libraries(mgl_qgl_example mgl ${MGL_QT5_LIBS})
++ target_link_libraries(mgl_qgl_example mgl${link_type} ${MGL_QT5_LIBS})
+ else(enable-qt5)
+ target_link_libraries(mgl_qgl_example mgl ${MGL_QT4_LIBS})
+ endif(enable-qt5)
+@@ -52,11 +52,11 @@ endif(QT_ENABLED)
+
+ if(MGL_HAVE_LTDL)
+ add_library(mgl_module MODULE mgl_module.cpp)
+- target_link_libraries(mgl_module mgl) # for compatibility with win32
++ target_link_libraries(mgl_module mgl${link_type}) # for compatibility with win32
+ endif(MGL_HAVE_LTDL)
+
+ if(MGL_HAVE_MPI)
+ add_executable(mgl_mpi_example mpi_test.cpp)
+- target_link_libraries(mgl_mpi_example mgl-mpi mgl ${MPI_LIBRARIES})
++ target_link_libraries(mgl_mpi_example mgl-mpi${link_type} mgl${link_type} ${MPI_LIBRARIES})
+ target_include_directories(mgl_mpi_example SYSTEM PUBLIC ${MPI_CXX_INCLUDE_PATH})
+ endif(MGL_HAVE_MPI)
+diff --git a/include/mgl2/abstract.h b/include/mgl2/abstract.h
+index da27869..b1e6761 100644
+--- a/include/mgl2/abstract.h
++++ b/include/mgl2/abstract.h
+@@ -20,6 +20,15 @@
+ #ifndef _MGL_ABSTRACT_H_
+ #define _MGL_ABSTRACT_H_
+
++#include "mgl2/dllexport.h"
++#if defined(BUILDING_mgl_LIB) || !defined mgl_EXPORTS
++#define MGL_CORE_EXPORT MGL_EXPORT
++#elif defined(_WIN32) && !defined(MGL_STATIC_DEFINE)
++#define MGL_CORE_EXPORT __declspec(dllimport)
++#else
++#define MGL_CORE_EXPORT
++#endif
++
+ #include "mgl2/define.h"
+ //-----------------------------------------------------------------------------
+ #ifdef __cplusplus
+@@ -209,11 +218,11 @@ cmdual MGL_EXPORT mgl_cexpr_eval_v(HAEX ex, mdual *vars);
+
+ //-----------------------------------------------------------------------------
+ /// Callback function for asking user a question. Result shouldn't exceed 1024.
+-extern MGL_EXPORT void (*mgl_ask_func)(const wchar_t *quest, wchar_t *res);
++extern MGL_CORE_EXPORT void (*mgl_ask_func)(const wchar_t *quest, wchar_t *res);
+ /// Console function for asking user a question. Result shouldn't exceed 1024.
+ void MGL_EXPORT mgl_ask_gets(const wchar_t *quest, wchar_t *res);
+ /// Callback function for displaying progress of something.
+-extern MGL_EXPORT void (*mgl_progress_func)(int value, int maximal, HMGL gr);
++extern MGL_CORE_EXPORT void (*mgl_progress_func)(int value, int maximal, HMGL gr);
+ /// Console function for displaying progress of something.
+ void MGL_EXPORT mgl_progress_txt(int value, int maximal, HMGL gr);
+ /// Display progress of something.
+@@ -404,7 +413,7 @@ struct MGL_EXPORT mglColorID
+ char id;
+ mglColor col;
+ };
+-MGL_EXPORT extern mglColorID mglColorIds[31];
++MGL_CORE_EXPORT extern mglColorID mglColorIds[31];
+ // MGL_EXPORT extern std::string mglGlobalMess; ///< Buffer for receiving global messages
+ //-----------------------------------------------------------------------------
+ #endif
+diff --git a/mgllab/CMakeLists.txt b/mgllab/CMakeLists.txt
+index 1649104..41c2e6a 100644
+--- a/mgllab/CMakeLists.txt
++++ b/mgllab/CMakeLists.txt
+@@ -38,7 +38,7 @@ if(MGL_HAVE_FLTK)
+ set(mgllab_src ${mgllab_src} mgllab.rc)
+ endif(WIN32)
+ add_executable(mgllab ${mgllab_src} ${mgllab_hdr})
+- target_link_libraries(mgllab mgl mgl-fltk ${FLTK_LIBRARIES})
++ target_link_libraries(mgllab mgl${link_type} mgl-fltk${link_type} ${getopt_lib-static} ${FLTK_LIBRARIES})
+ install(
+ TARGETS mgllab
+ RUNTIME DESTINATION bin )
+diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
+index 3e10fa7..0281859 100644
+--- a/utils/CMakeLists.txt
++++ b/utils/CMakeLists.txt
+@@ -1,11 +1,5 @@
+ add_executable(make_pas make_pas.cpp)
+
+-if(MSVC)
+-set(link_type -static)
+-else(MSVC)
+-set(link_type)
+-endif(MSVC)
+-
+ add_executable(mgltask mgltask.cpp)
+ target_link_libraries(mgltask mgl${link_type} ${getopt_lib-static})
+ install(
+@@ -23,7 +17,7 @@ install(
+ )
+
+ add_executable(mgl.cgi mglcgi.cpp)
+-target_link_libraries(mgl.cgi mgl-static)
++target_link_libraries(mgl.cgi mgl${link_type})
+ install(
+ TARGETS mgl.cgi
+ EXPORT MathGLTargets
+@@ -36,7 +30,7 @@ mgl_po_src(mglconv.cpp mglview.cpp mglcgi.cpp mgltask.cpp)
+ if(MGL_HAVE_FLTK)
+ add_definitions(-DUSE_FLTK)
+ add_executable(mglview mglview.cpp)
+- target_link_libraries(mglview mgl-fltk ${getopt_lib-static} ${FLTK_LIBRARIES})
++ target_link_libraries(mglview mgl-fltk${link_type} ${getopt_lib-static} ${FLTK_LIBRARIES})
+ install(
+ TARGETS mglview
+ EXPORT MathGLTargets
diff --git a/vcpkg/ports/mathgl/portfile.cmake b/vcpkg/ports/mathgl/portfile.cmake
new file mode 100644
index 0000000..df0ad2b
--- /dev/null
+++ b/vcpkg/ports/mathgl/portfile.cmake
@@ -0,0 +1,109 @@
+vcpkg_from_sourceforge(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO mathgl/mathgl
+ REF "mathgl%208.0"
+ FILENAME "mathgl-${VERSION}.tar.gz"
+ SHA512 1ff3023f1bbd7bfd84202777a0166a8d4255a020a07f3650b9858929345bc8a2ceea4db155d2c93ba32b762d2304474276290a9edac99fda70fb4b5bc12982c2
+ PATCHES
+ cmake-config.patch
+ dependencies.patch
+ linkage.patch
+ enable-examples.patch
+ fix-examples.patch
+ fix-cross-builds.patch
+ fix-format-specifiers.patch
+ fix-glut.patch
+ fix-mgllab.patch
+ include_functional.patch
+ fix-include-property.patch
+ fix_link_gsl.patch
+)
+file(REMOVE_RECURSE "${SOURCE_PATH}/addons/getopt")
+
+vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+FEATURES
+ arma enable-arma
+ examples enable-examples
+ fltk enable-fltk
+ gif enable-gif
+ glut enable-glut
+ gsl enable-gsl
+ hdf5 enable-hdf5
+ jpeg enable-jpeg
+ opengl enable-opengl
+ png enable-png
+ qt5 enable-qt5
+ wx enable-wx
+ zlib enable-zlib
+)
+
+if(VCPKG_TARGET_IS_OSX)
+ list(APPEND FEATURE_OPTIONS
+ -Denable-openmp=OFF
+ -Denable-pthread=ON
+ )
+endif()
+
+if(VCPKG_CROSSCOMPILING)
+ list(APPEND FEATURE_OPTIONS "-DMAKE_BIN_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/${PORT}/make_bin${VCPKG_HOST_EXECUTABLE_SUFFIX}")
+endif()
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ ${FEATURE_OPTIONS}
+ "-DCMAKE_PROJECT_INCLUDE=${CMAKE_CURRENT_LIST_DIR}/cmake-project-include.cmake"
+ -DMathGL_INSTALL_CMAKE_DIR:STRING=share/mathgl2
+ -DCMAKE_CXX_STANDARD=11 # minimum for armadillo on osx
+ -DCMAKE_DISABLE_FIND_PACKAGE_Intl=1
+ -DCMAKE_POLICY_DEFAULT_CMP0127=NEW # cmake_dependent_option condition syntax
+)
+
+vcpkg_cmake_install()
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/mgl2/dllexport.h" "#ifdef MGL_STATIC_DEFINE" "#if 1")
+else()
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/mgl2/dllexport.h" "#ifdef MGL_STATIC_DEFINE" "#if 0")
+endif()
+
+# MathGL exports proper CMake config under the MathGL2Config.cmake filename, and
+# a find_path/find_library based package under the mathgl2-config.cmake filename.
+# The latter doesn't support multi-config or static linkage requirements, and
+# the variable names don't match the package names, i.e. it is unusable.
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(REMOVE "${CURRENT_PACKAGES_DIR}/mathgl2-config.cmake")
+ file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/mathgl2-config.cmake")
+else()
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/cmake")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/lib/cmake")
+endif()
+vcpkg_cmake_config_fixup(PACKAGE_NAME mathgl2)
+
+file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/debug/share"
+ "${CURRENT_PACKAGES_DIR}/debug/include"
+ "${CURRENT_PACKAGES_DIR}/share/applications"
+ "${CURRENT_PACKAGES_DIR}/share/mime"
+ "${CURRENT_PACKAGES_DIR}/share/pixmaps"
+)
+
+set(tools mglconv mgltask)
+if(NOT VCPKG_CROSSCOMPILING)
+ list(APPEND tools make_bin)
+endif()
+if(enable-fltk)
+ list(APPEND tools mglview mgllab)
+endif()
+if(enable-qt5)
+ list(APPEND tools mglview udav)
+endif()
+list(REMOVE_DUPLICATES tools)
+vcpkg_copy_tools(TOOL_NAMES ${tools} AUTO_CLEAN)
+
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/mgl2/config.h" "#define MGL_INSTALL_DIR \"${CURRENT_PACKAGES_DIR}\"" "")
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/mgl2/config.h" "#define MGL_FONT_PATH\t\"${CURRENT_PACKAGES_DIR}/fonts\"" "" IGNORE_UNCHANGED) # there is no fonts folder
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/mgl2/config.h" "#define MGL_FONT_PATH\t\"${CURRENT_PACKAGES_DIR}/share/mathgl/fonts\"" "" IGNORE_UNCHANGED)
+
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
diff --git a/vcpkg/ports/mathgl/usage b/vcpkg/ports/mathgl/usage
new file mode 100644
index 0000000..ca6cc11
--- /dev/null
+++ b/vcpkg/ports/mathgl/usage
@@ -0,0 +1,4 @@
+mathgl provides CMake targets:
+
+ find_package(MathGL2 CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE $<IF:$<TARGET_EXISTS:mgl>,mgl,mgl-static>)
diff --git a/vcpkg/ports/mathgl/vcpkg.json b/vcpkg/ports/mathgl/vcpkg.json
new file mode 100644
index 0000000..df76d14
--- /dev/null
+++ b/vcpkg/ports/mathgl/vcpkg.json
@@ -0,0 +1,137 @@
+{
+ "name": "mathgl",
+ "version": "8.0.1",
+ "port-version": 7,
+ "description": "MathGL is a free library of fast C++ routines for the plotting of the data varied in one or more dimensions",
+ "license": "GPL-3.0-only",
+ "supports": "!uwp & !xbox & !android",
+ "dependencies": [
+ "getopt",
+ {
+ "$comment": "Non-windows targets need host `make_bin`.",
+ "name": "mathgl",
+ "host": true,
+ "default-features": false
+ },
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ }
+ ],
+ "default-features": [
+ "jpeg",
+ "opengl",
+ "png",
+ "zlib"
+ ],
+ "features": {
+ "arma": {
+ "description": "Armadillo support",
+ "dependencies": [
+ "armadillo"
+ ]
+ },
+ "examples": {
+ "description": "Build example programs (not installed)"
+ },
+ "fltk": {
+ "description": "fltk module",
+ "dependencies": [
+ {
+ "name": "fltk",
+ "default-features": false
+ }
+ ]
+ },
+ "gif": {
+ "description": "gif module",
+ "dependencies": [
+ "giflib"
+ ]
+ },
+ "glut": {
+ "description": "glut module",
+ "dependencies": [
+ {
+ "name": "freeglut",
+ "platform": "!osx"
+ },
+ {
+ "name": "mathgl",
+ "default-features": false,
+ "features": [
+ "opengl"
+ ]
+ }
+ ]
+ },
+ "gsl": {
+ "description": "gsl module",
+ "dependencies": [
+ "gsl"
+ ]
+ },
+ "hdf5": {
+ "description": "hdf5 module",
+ "dependencies": [
+ {
+ "name": "hdf5",
+ "default-features": false
+ }
+ ]
+ },
+ "jpeg": {
+ "description": "jpeg module",
+ "dependencies": [
+ "libjpeg-turbo"
+ ]
+ },
+ "opengl": {
+ "description": "opengl module",
+ "dependencies": [
+ "opengl"
+ ]
+ },
+ "png": {
+ "description": "png module",
+ "dependencies": [
+ "libpng",
+ {
+ "name": "mathgl",
+ "default-features": false,
+ "features": [
+ "zlib"
+ ]
+ }
+ ]
+ },
+ "qt5": {
+ "description": "qt5 module",
+ "dependencies": [
+ {
+ "name": "qt5-base",
+ "default-features": false
+ }
+ ]
+ },
+ "wx": {
+ "description": "wx module",
+ "dependencies": [
+ {
+ "name": "wxwidgets",
+ "default-features": false
+ }
+ ]
+ },
+ "zlib": {
+ "description": "zlib module",
+ "dependencies": [
+ "zlib"
+ ]
+ }
+ }
+}