aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/metis
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/metis
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/metis')
-rw-r--r--vcpkg/ports/metis/build-fixes.patch146
-rw-r--r--vcpkg/ports/metis/install_config.cmake33
-rw-r--r--vcpkg/ports/metis/portfile.cmake23
-rw-r--r--vcpkg/ports/metis/vcpkg.json18
4 files changed, 220 insertions, 0 deletions
diff --git a/vcpkg/ports/metis/build-fixes.patch b/vcpkg/ports/metis/build-fixes.patch
new file mode 100644
index 0000000..0328e25
--- /dev/null
+++ b/vcpkg/ports/metis/build-fixes.patch
@@ -0,0 +1,146 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ef34603..0168a4b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,9 +1,12 @@
+ cmake_minimum_required(VERSION 3.10)
+ project(METIS C)
+
+-set(SHARED FALSE CACHE BOOL "build a shared library")
++set(SHARED "${BUILD_SHARED_LIBS}" CACHE BOOL "build a shared library")
++if(WIN32 AND SHARED)
++ add_compile_definitions(-D_WINDLL)
++endif()
+
+-if(MSVC)
++if(0)
+ set(METIS_INSTALL FALSE)
+ else()
+ set(METIS_INSTALL TRUE)
+@@ -38,15 +41,12 @@ include(./conf/gkbuild.cmake)
+ # Add include directories.
+ # i.e., the -I equivalent
+ include_directories(build/xinclude)
+-include_directories(${GKLIB_PATH}/include)
+-include_directories(${CMAKE_INSTALL_PREFIX}/include)
+
+ # List of paths that the compiler will search for library files.
+ # i.e., the -L equivalent
+-link_directories(${GKLIB_PATH}/lib)
+-link_directories(${CMAKE_INSTALL_PREFIX}/lib)
+
+ # Recursively look for CMakeLists.txt in subdirs.
+ add_subdirectory("build/xinclude")
+ add_subdirectory("libmetis")
+-add_subdirectory("programs")
++
++include(install_config.cmake)
+diff --git a/conf/gkbuild.cmake b/conf/gkbuild.cmake
+index 591ece4..3719093 100644
+--- a/conf/gkbuild.cmake
++++ b/conf/gkbuild.cmake
+@@ -16,7 +16,6 @@ option(GKRAND "enable GKRAND support" OFF)
+
+ # Add compiler flags.
+ if(MSVC)
+- set(GK_COPTS "/Ox")
+ set(GK_COPTIONS "-DWIN32 -DMSC -D_CRT_SECURE_NO_DEPRECATE -DUSE_GKREGEX")
+ elseif(MINGW)
+ set(GK_COPTS "-DUSE_GKREGEX")
+@@ -31,6 +30,8 @@ if(CMAKE_COMPILER_IS_GNUCC)
+ set(GK_COPTIONS "${GK_COPTIONS} -std=c99 -fno-strict-aliasing")
+ if(VALGRIND)
+ set(GK_COPTIONS "${GK_COPTIONS} -march=x86-64 -mtune=generic")
++elseif(1)
++ # Use flags from toolchain and triplet
+ else()
+ # -march=native is not a valid flag on PPC:
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "power|ppc|powerpc|ppc64|powerpc64" OR (APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc|ppc64"))
+@@ -44,6 +45,7 @@ endif(VALGRIND)
+ endif(NOT MINGW)
+ # GCC warnings.
+ set(GK_COPTIONS "${GK_COPTIONS} -Werror -Wall -pedantic -Wno-unused-function -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unknown-pragmas -Wno-unused-label")
++ string(REPLACE " -Werror " " " GK_COPTIONS "${GK_COPTIONS}")
+ elseif(${CMAKE_C_COMPILER_ID} MATCHES "Sun")
+ # Sun insists on -xc99.
+ set(GK_COPTIONS "${GK_COPTIONS} -xc99")
+@@ -74,6 +76,8 @@ endif(OPENMP)
+ if(GDB)
+ set(GK_COPTS "${GK_COPTS} -g")
+ set(GK_COPTIONS "${GK_COPTIONS} -Werror")
++elseif(1)
++ # Use flags from toolchain and triplet
+ else()
+ set(GK_COPTS "-O3")
+ endif(GDB)
+diff --git a/include/metis.h b/include/metis.h
+index ab475fe..8033858 100644
+--- a/include/metis.h
++++ b/include/metis.h
+@@ -30,7 +30,7 @@
+ GCC does provides these definitions in stdint.h, but it may require some
+ modifications on other architectures.
+ --------------------------------------------------------------------------*/
+-//#define IDXTYPEWIDTH 32
++#define IDXTYPEWIDTH 32
+
+
+ /*--------------------------------------------------------------------------
+@@ -40,7 +40,7 @@
+ 32 : single precision floating point (float)
+ 64 : double precision floating point (double)
+ --------------------------------------------------------------------------*/
+-//#define REALTYPEWIDTH 32
++#define REALTYPEWIDTH 32
+
+
+
+@@ -72,10 +72,14 @@ typedef __int64 int64_t;
+ #define PRId64 "I64d"
+ #define SCNd32 "ld"
+ #define SCNd64 "I64d"
++#ifdef _WIN32
++#include <stdint.h>
++#else
+ #define INT32_MIN ((int32_t)_I32_MIN)
+ #define INT32_MAX _I32_MAX
+ #define INT64_MIN ((int64_t)_I64_MIN)
+ #define INT64_MAX _I64_MAX
++#endif // ^^^ !_WIN32
+ #else
+ #include <inttypes.h>
+ #endif
+diff --git a/libmetis/CMakeLists.txt b/libmetis/CMakeLists.txt
+index fc6cec6..a56f6ca 100644
+--- a/libmetis/CMakeLists.txt
++++ b/libmetis/CMakeLists.txt
+@@ -6,10 +6,15 @@ file(GLOB metis_sources *.c)
+
+ # Build libmetis.
+ add_library(metis ${METIS_LIBRARY_TYPE} ${metis_sources})
++target_include_directories(metis INTERFACE $<INSTALL_INTERFACE:include>)
++
++find_package(GKlib CONFIG REQUIRED)
++target_link_libraries(metis PRIVATE GKlib::GKlib)
+
+ if(METIS_INSTALL)
+ install(TARGETS metis
++ EXPORT metisTargets
+ LIBRARY DESTINATION lib
+- RUNTIME DESTINATION lib
++ RUNTIME DESTINATION bin
+ ARCHIVE DESTINATION lib)
+ endif()
+diff --git a/libmetis/metislib.h b/libmetis/metislib.h
+index dc224f4..1efccda 100644
+--- a/libmetis/metislib.h
++++ b/libmetis/metislib.h
+@@ -31,7 +31,7 @@
+ #include "proto.h"
+
+
+-#if defined(COMPILER_MSC)
++#if defined(COMPILER_MSC) && (_MSC_VER < 1900)
+ #if defined(rint)
+ #undef rint
+ #endif
diff --git a/vcpkg/ports/metis/install_config.cmake b/vcpkg/ports/metis/install_config.cmake
new file mode 100644
index 0000000..50b4b1c
--- /dev/null
+++ b/vcpkg/ports/metis/install_config.cmake
@@ -0,0 +1,33 @@
+install(EXPORT metisTargets
+ FILE metisTargets.cmake
+ DESTINATION share/metis
+)
+
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/metisConfig.cmake"
+ "include(CMakeFindDependencyMacro)
+find_dependency(GKlib CONFIG)
+include(\"\${CMAKE_CURRENT_LIST_DIR}/metisTargets.cmake\")
+")
+
+# Copied from https://github.com/ceres-solver/ceres-solver/blob/2.2.0/cmake/FindMETIS.cmake#L69-L77
+file(READ "${PROJECT_SOURCE_DIR}/include/metis.h" _METIS_VERSION_CONTENTS)
+string(REGEX REPLACE ".*#define METIS_VER_MAJOR[ \t]+([0-9]+).*" "\\1"
+ METIS_VERSION_MAJOR "${_METIS_VERSION_CONTENTS}")
+string(REGEX REPLACE ".*#define METIS_VER_MINOR[ \t]+([0-9]+).*" "\\1"
+ METIS_VERSION_MINOR "${_METIS_VERSION_CONTENTS}")
+string(REGEX REPLACE ".*#define METIS_VER_SUBMINOR[ \t]+([0-9]+).*" "\\1"
+ METIS_VERSION_PATCH "${_METIS_VERSION_CONTENTS}")
+set(METIS_VERSION "${METIS_VERSION_MAJOR}.${METIS_VERSION_MINOR}.${METIS_VERSION_PATCH}")
+
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/metisConfigVersion.cmake"
+ VERSION ${METIS_VERSION}
+ COMPATIBILITY SameMajorVersion
+)
+
+install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/metisConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/metisConfigVersion.cmake"
+ DESTINATION "share/metis"
+)
diff --git a/vcpkg/ports/metis/portfile.cmake b/vcpkg/ports/metis/portfile.cmake
new file mode 100644
index 0000000..c96610d
--- /dev/null
+++ b/vcpkg/ports/metis/portfile.cmake
@@ -0,0 +1,23 @@
+vcpkg_from_github(OUT_SOURCE_PATH SOURCE_PATH
+ REPO KarypisLab/METIS
+ REF a6e6a2cfa92f93a3ee2971ebc9ddfc3b0b581ab2
+ SHA512 c41168788c287ed9baea3c43c1ea8ef7d0bbdaa340a03cbbb5d0ba2d928d8a6dd83e2b77e7d3fabc58ac6d2b59a4be0492940e31460fe5e1807849cb98e80d2e
+ PATCHES
+ build-fixes.patch
+)
+file(COPY "${SOURCE_PATH}/include/" DESTINATION "${SOURCE_PATH}/build/xinclude")
+file(COPY "${CMAKE_CURRENT_LIST_DIR}/install_config.cmake" DESTINATION "${SOURCE_PATH}")
+
+vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}")
+vcpkg_cmake_install()
+vcpkg_copy_pdbs()
+vcpkg_cmake_config_fixup()
+
+if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/metis.h" "#ifdef _WINDLL" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/metis.h" "__declspec(dllexport)" "__declspec(dllimport)")
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
diff --git a/vcpkg/ports/metis/vcpkg.json b/vcpkg/ports/metis/vcpkg.json
new file mode 100644
index 0000000..5178825
--- /dev/null
+++ b/vcpkg/ports/metis/vcpkg.json
@@ -0,0 +1,18 @@
+{
+ "name": "metis",
+ "version-date": "2025-07-04",
+ "description": "Serial Graph Partitioning and Fill-reducing Matrix Ordering",
+ "homepage": "https://github.com/KarypisLab/METIS",
+ "license": "Apache-2.0",
+ "dependencies": [
+ "gklib",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ }
+ ]
+}