aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/scotch
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/scotch
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/scotch')
-rw-r--r--vcpkg/ports/scotch/fix-build.patch282
-rw-r--r--vcpkg/ports/scotch/portfile.cmake64
-rw-r--r--vcpkg/ports/scotch/vcpkg.json31
3 files changed, 377 insertions, 0 deletions
diff --git a/vcpkg/ports/scotch/fix-build.patch b/vcpkg/ports/scotch/fix-build.patch
new file mode 100644
index 0000000..cbe27c3
--- /dev/null
+++ b/vcpkg/ports/scotch/fix-build.patch
@@ -0,0 +1,282 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ce3c5ba..b05667f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -42,7 +42,7 @@
+ ############################################################
+
+ cmake_minimum_required(VERSION 3.10)
+-project(SCOTCH LANGUAGES C Fortran)
++project(SCOTCH LANGUAGES C)
+
+ # Add module directory
+ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 1c05a82..fe7c106 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -105,9 +105,12 @@ endif()
+
+ # Thread support in Scotch
+ if(THREADS)
+- find_package(Threads)
+- if(Threads_FOUND)
++set(USE_PTHREAD OFF)
++if(NOT WIN32)
++ find_package(Threads REQUIRED)
++ if(CMAKE_USE_PTHREADS_INIT)
+ add_definitions(-DCOMMON_PTHREAD -DSCOTCH_PTHREAD)
++ set(USE_PTHREAD ON)
+ endif()
+ if(CMAKE_USE_WIN32_THREADS_INIT)
+ add_definitions(-DCOMMON_THREAD_WIN32)
+@@ -116,6 +119,12 @@ if(THREADS)
+ if(PTHREAD_AFFINITY_LINUX_OK)
+ add_definitions(-DCOMMON_PTHREAD_AFFINITY_LINUX)
+ endif()
++else()
++ find_package(PThreads4W REQUIRED)
++ add_definitions(-DCOMMON_PTHREAD -DSCOTCH_PTHREAD)
++ link_libraries(PThreads4W::PThreads4W)
++ set(USE_PTHREAD ON)
++endif()
+ endif()
+
+ # decompression libs
+diff --git a/src/libscotch/CMakeLists.txt b/src/libscotch/CMakeLists.txt
+index f314d3a..27e466f 100644
+--- a/src/libscotch/CMakeLists.txt
++++ b/src/libscotch/CMakeLists.txt
+@@ -509,6 +509,22 @@ set(SCOTCH_C_SOURCES
+ wgraph_part_zr.h
+ wgraph_store.c)
+
++add_library(scotcherr library_error.c)
++target_include_directories(scotcherr PUBLIC
++ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
++ $<BUILD_INTERFACE:${GENERATED_INCLUDE_DIR}>
++ $<INSTALL_INTERFACE:include>)
++
++add_dependencies(scotcherr scotch_h)
++
++add_library(scotcherrexit library_error_exit.c)
++target_include_directories(scotcherrexit PUBLIC
++ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
++ $<BUILD_INTERFACE:${GENERATED_INCLUDE_DIR}>
++ $<INSTALL_INTERFACE:include>)
++
++add_dependencies(scotcherrexit scotch_h)
++
+ add_library(scotch
+ ${SCOTCH_C_SOURCES})
+ set_target_properties(scotch PROPERTIES VERSION ${SCOTCH_VERSION_LONG}
+@@ -551,10 +567,14 @@ if(LIBLZMA_FOUND)
+ endif()
+
+ # Add thread library
+-if(Threads_FOUND)
+- target_compile_definitions(scotch PRIVATE COMMON_PTHREAD SCOTCH_PTHREAD)
+- target_link_libraries(scotch PRIVATE Threads::Threads ${THREADS_PTHREADS_WIN32_LIBRARY})
+-endif(Threads_FOUND)
++if(USE_PTHREAD)
++ target_compile_definitions(scotch PUBLIC COMMON_PTHREAD SCOTCH_PTHREAD)
++ if(NOT WIN32)
++ target_link_libraries(scotch PUBLIC Threads::Threads)
++ else()
++ target_link_libraries(scotch PUBLIC PThreads4W::PThreads4W)
++ endif()
++endif(USE_PTHREAD)
+
+ # Include files
+ add_dependencies(scotch scotch_h scotchf_h)
+@@ -567,25 +587,7 @@ if(CMAKE_BUILD_TYPE STREQUAL Debug)
+ target_compile_definitions(scotch PRIVATE SCOTCH_DEBUG_LIBRARY1)
+ endif()
+
+-add_library(scotcherr library_error.c)
+-set_target_properties(scotcherr PROPERTIES VERSION ${SCOTCH_VERSION_LONG}
+- SOVERSION ${SCOTCH_VERSION}.${SCOTCH_RELEASE})
+-target_include_directories(scotcherr PUBLIC
+- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+- $<BUILD_INTERFACE:${GENERATED_INCLUDE_DIR}>
+- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+-
+-add_dependencies(scotcherr scotch_h)
+-
+-add_library(scotcherrexit library_error_exit.c)
+-set_target_properties(scotcherrexit PROPERTIES VERSION ${SCOTCH_VERSION_LONG}
+- SOVERSION ${SCOTCH_VERSION}.${SCOTCH_RELEASE})
+-target_include_directories(scotcherrexit PUBLIC
+- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+- $<BUILD_INTERFACE:${GENERATED_INCLUDE_DIR}>
+- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+-
+-add_dependencies(scotcherrexit scotch_h)
++target_link_libraries(scotch PRIVATE scotcherr)
+
+ #################
+ # libPTScotch #
+@@ -786,10 +788,14 @@ if(BUILD_PTSCOTCH)
+ set_target_properties(ptscotch PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
+ endif(APPLE)
+
+- if(Threads_FOUND)
+- target_compile_definitions(ptscotch PRIVATE SCOTCH_PTHREAD COMMON_PTHREAD)
+- target_link_libraries(ptscotch PRIVATE Threads::Threads ${THREADS_PTHREADS_WIN32_LIBRARY})
+- endif(Threads_FOUND)
++ if(USE_PTHREAD)
++ target_compile_definitions(ptscotch PUBLIC COMMON_PTHREAD SCOTCH_PTHREAD)
++ if(NOT WIN32)
++ target_link_libraries(ptscotch PUBLIC Threads::Threads)
++ else()
++ target_link_libraries(ptscotch PUBLIC PThreads4W::PThreads4W)
++ endif()
++ endif(USE_PTHREAD)
+
+ add_library(ptscotcherr library_error.c)
+ set_target_properties(ptscotcherr PROPERTIES VERSION ${SCOTCH_VERSION_LONG}
+diff --git a/src/libscotch/common_file_compress.c b/src/libscotch/common_file_compress.c
+index 5255cdc..5f60dc8 100644
+--- a/src/libscotch/common_file_compress.c
++++ b/src/libscotch/common_file_compress.c
+@@ -378,8 +378,11 @@ FileCompress * const compptr)
+ encodat.avail_out = FILECOMPRESSDATASIZE;
+ do {
+ if ((encodat.avail_in == 0) && (enacval == LZMA_RUN)) {
++#ifdef _MSC_VER
++ int bytenbr; //According to MSDN _read only returns int
++#else
+ ssize_t bytenbr;
+-
++#endif
+ bytenbr = read (compptr->infdnum, compptr->bufftab, FILECOMPRESSDATASIZE); /* Read from pipe */
+ if (bytenbr < 0) {
+ errorPrint ("fileCompressLzma: cannot read");
+diff --git a/src/libscotch/common_file_decompress.c b/src/libscotch/common_file_decompress.c
+index 6e80222..3048d90 100644
+--- a/src/libscotch/common_file_decompress.c
++++ b/src/libscotch/common_file_decompress.c
+@@ -373,7 +373,11 @@ FileCompress * const compptr)
+ decodat.avail_out = FILECOMPRESSDATASIZE;
+ do {
+ if ((decodat.avail_in == 0) && (deacval == LZMA_RUN)) {
++#ifdef _MSC_VER
++ size_t bytenbr; //According to MSDN fread returns size_t
++#else
+ ssize_t bytenbr;
++#endif
+
+ bytenbr = fread (compptr->bufftab, 1, FILECOMPRESSDATASIZE, compptr->oustptr); /* Read from pipe */
+ if (ferror (compptr->oustptr)) {
+diff --git a/src/libscotch/common_thread.h b/src/libscotch/common_thread.h
+index a8d3284..2e9ae28 100644
+--- a/src/libscotch/common_thread.h
++++ b/src/libscotch/common_thread.h
+@@ -82,6 +82,8 @@ struct ThreadContext_ {
+ int dummval; /*+ Dummy value if no affinity enabled +*/
+ #ifdef COMMON_PTHREAD_AFFINITY_LINUX
+ cpu_set_t cpusdat; /*+ Original thread mask of main thread +*/
++#else
++ void* dummy;
+ #endif /* COMMON_PTHREAD_AFFINITY_LINUX */
+ } savedat; /*+ Save area for affinity mask +*/
+ #endif /* COMMON_PTHREAD */
+diff --git a/src/libscotch/context.c b/src/libscotch/context.c
+index fbd8cbc..95e050a 100644
+--- a/src/libscotch/context.c
++++ b/src/libscotch/context.c
+@@ -70,8 +70,11 @@ static struct ContextValuesData_ {
+ #else /* ((defined SCOTCH_DETERMINISTIC) || (defined COMMON_RANDOM_FIXED_SEED)) */
+ 0
+ #endif /* ((defined SCOTCH_DETERMINISTIC) || (defined COMMON_RANDOM_FIXED_SEED)) */
+- }, { -1.0 } }; /* Temporary hack: dummy value since ISO C does not accept zero-sized arrays */
+-
++ }
++#ifndef _MSC_VER
++ , { }
++#endif
++ };
+ /***********************************/
+ /* */
+ /* These routines handle contexts. */
+@@ -89,6 +92,6 @@ contextOptionsInit (
+ Context * const contptr)
+ {
+ return (contextValuesInit (contptr, &contextvaluesdat, sizeof (contextvaluesdat),
+- CONTEXTOPTIONNUMNBR, (byte *) &contextvaluesdat.vinttab - (byte *) &contextvaluesdat,
+- CONTEXTOPTIONDBLNBR, (byte *) &contextvaluesdat.vdbltab - (byte *) &contextvaluesdat));
++ CONTEXTOPTIONNUMNBR, (char *) &contextvaluesdat.vinttab - (char *) &contextvaluesdat,
++ CONTEXTOPTIONDBLNBR, (char *) &contextvaluesdat.vdbltab - (char *) &contextvaluesdat));
+ }
+diff --git a/src/libscotch/parser_ll.l b/src/libscotch/parser_ll.l
+index d655669..c535e2e 100644
+--- a/src/libscotch/parser_ll.l
++++ b/src/libscotch/parser_ll.l
+@@ -95,6 +95,10 @@
+ %option noyywrap
+ %option reentrant
+
++/* To support build on Windows */
++%option nounistd
++
++
+ IDENT [A-Za-z][0-9A-Za-z]*
+ INTEGER [0-9]+
+ FLOAT [0-9]+(\.[0-9]+)?([Ee][-+]?[0-9]+)?
+diff --git a/src/libscotch/parser_yy.y b/src/libscotch/parser_yy.y
+index 2350980..77faadd 100644
+--- a/src/libscotch/parser_yy.y
++++ b/src/libscotch/parser_yy.y
+@@ -81,6 +81,9 @@ typedef void * YY_BUFFER_STATE; /* The same; Flex and Bison de
+ ** The defines and includes (bis).
+ */
+
++#ifdef _MSC_VER
++#define YY_NO_UNISTD_H
++#endif
+ #include "parser.h"
+ #include "parser_yy.h"
+ #include "parser_ly.h"
+diff --git a/src/scotch/CMakeLists.txt b/src/scotch/CMakeLists.txt
+index d706637..79e2be1 100644
+--- a/src/scotch/CMakeLists.txt
++++ b/src/scotch/CMakeLists.txt
+@@ -67,10 +67,15 @@ function(add_scotch_exe)
+ add_dependencies(${file_we} scotch_h)
+ target_include_directories(${file_we} PRIVATE ${GENERATED_INCLUDE_DIR})
+ target_compile_definitions(${file_we} PUBLIC "SCOTCH_CODENAME=\"${SCOTCH_CODENAME}\"")
+- if(Threads_FOUND)
+- target_compile_definitions(${file_we} PUBLIC SCOTCH_PTHREAD COMMON_PTHREAD)
+- target_link_libraries(${file_we} PUBLIC Threads::Threads ${THREADS_PTHREADS_WIN32_LIBRARY})
+- endif(Threads_FOUND)
++
++ if(USE_PTHREAD)
++ target_compile_definitions(${file_we} PUBLIC COMMON_PTHREAD SCOTCH_PTHREAD)
++ if(NOT WIN32)
++ target_link_libraries(${file_we} PUBLIC Threads::Threads)
++ else()
++ target_link_libraries(${file_we} PUBLIC PThreads4W::PThreads4W)
++ endif()
++ endif(USE_PTHREAD)
+ target_link_libraries(${file_we} PUBLIC scotch scotcherrexit)
+ endfunction(add_scotch_exe)
+
+@@ -144,10 +149,14 @@ if(BUILD_PTSCOTCH)
+ ${GENERATED_INCLUDE_DIR}/ptscotch.h)
+ add_dependencies(${file_we} ptscotch_h)
+ target_compile_definitions(${file_we} PUBLIC "SCOTCH_CODENAME=\"${SCOTCH_CODENAME}\"")
+- if(Threads_FOUND)
+- target_compile_definitions(${file_we} PUBLIC SCOTCH_PTHREAD COMMON_PTHREAD)
+- target_link_libraries(${file_we} PUBLIC Threads::Threads ${THREADS_PTHREADS_WIN32_LIBRARY})
+- endif(Threads_FOUND)
++ if(USE_PTHREAD)
++ target_compile_definitions(${file_we} PUBLIC COMMON_PTHREAD SCOTCH_PTHREAD)
++ if(NOT WIN32)
++ target_link_libraries(${file_we} PUBLIC Threads::Threads)
++ else()
++ target_link_libraries(${file_we} PUBLIC PThreads4W::PThreads4W)
++ endif()
++ endif(USE_PTHREAD)
+ target_include_directories(${file_we} PRIVATE ${GENERATED_INCLUDE_DIR})
+ target_link_libraries(${file_we} PUBLIC scotch ptscotch ptscotcherrexit)
+ endfunction(add_ptscotch_exe)
diff --git a/vcpkg/ports/scotch/portfile.cmake b/vcpkg/ports/scotch/portfile.cmake
new file mode 100644
index 0000000..42cf393
--- /dev/null
+++ b/vcpkg/ports/scotch/portfile.cmake
@@ -0,0 +1,64 @@
+if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+endif()
+vcpkg_from_gitlab(
+ GITLAB_URL https://gitlab.inria.fr/
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO scotch/scotch
+ REF "v${VERSION}"
+ SHA512 9566ca800fd47df63844df6ff8b0fbbe8efbdea549914dfe9bf00d3d104a8c5631cfbef69e2677de68dcdb93addaeed158e6f6a373b5afe8cec82ac358946b65
+ HEAD_REF master
+ PATCHES fix-build.patch
+)
+
+vcpkg_find_acquire_program(FLEX)
+cmake_path(GET FLEX PARENT_PATH FLEX_DIR)
+vcpkg_add_to_path("${FLEX_DIR}")
+
+vcpkg_find_acquire_program(BISON)
+cmake_path(GET BISON PARENT_PATH BISON_DIR)
+vcpkg_add_to_path("${BISON_DIR}")
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ #Uses gcc intrinsics otherwise
+ string(APPEND VCPKG_C_FLAGS " -DGRAPHMATCHNOTHREAD")
+ string(APPEND VCPKG_CXX_FLAGS " -DGRAPHMATCHNOTHREAD")
+endif()
+
+vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+ FEATURES
+ ptscotch BUILD_PTSCOTCH
+)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS ${FEATURE_OPTIONS}
+ -DBUILD_LIBESMUMPS=OFF
+ -DBUILD_LIBSCOTCHMETIS=OFF
+ -DTHREADS=ON
+ -DMPI_THREAD_MULTIPLE=OFF
+)
+vcpkg_cmake_install()
+vcpkg_cmake_config_fixup(CONFIG_PATH "lib/cmake/scotch")
+vcpkg_copy_tools(TOOL_NAMES
+ acpl amk_ccc amk_fft2 amk_grf amk_hy
+ amk_m2 amk_p2 atst gbase gcv gmap gmk_hy
+ gmk_m2 gmk_m3 gmk_msh gmk_ub2 gmtst
+ gord gotst gscat gtst mcv mmk_m2 mmk_m3
+ mord mtst
+ AUTO_CLEAN
+ )
+
+if ("ptscotch" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES dggath dgmap dgord dgscat dgtst AUTO_CLEAN)
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/doc/CeCILL-C_V1-en.txt")
+
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/scotch/SCOTCHConfig.cmake" "find_dependency(Threads)" "if(NOT WIN32)\nfind_dependency(Threads)\nelse()\nfind_dependency(PThreads4W)\nendif()")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include"
+ "${CURRENT_PACKAGES_DIR}/debug/man"
+ "${CURRENT_PACKAGES_DIR}/man"
+ "${CURRENT_PACKAGES_DIR}/debug/share"
+ )
diff --git a/vcpkg/ports/scotch/vcpkg.json b/vcpkg/ports/scotch/vcpkg.json
new file mode 100644
index 0000000..3793326
--- /dev/null
+++ b/vcpkg/ports/scotch/vcpkg.json
@@ -0,0 +1,31 @@
+{
+ "name": "scotch",
+ "version": "7.0.5",
+ "port-version": 1,
+ "description": "Scotch: a software package for graph and mesh/hypergraph partitioning, graph clustering, and sparse matrix ordering",
+ "homepage": "https://gitlab.inria.fr/scotch/scotch",
+ "license": null,
+ "supports": "!arm & !uwp & !android & !osx",
+ "dependencies": [
+ "bzip2",
+ "liblzma",
+ "pthread",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ },
+ "zlib"
+ ],
+ "features": {
+ "ptscotch": {
+ "description": "Build PT-Scotch",
+ "dependencies": [
+ "mpi"
+ ]
+ }
+ }
+}