diff options
| author | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
|---|---|---|
| committer | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
| commit | 54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch) | |
| tree | d915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/scotch | |
Diffstat (limited to 'vcpkg/ports/scotch')
| -rw-r--r-- | vcpkg/ports/scotch/fix-build.patch | 282 | ||||
| -rw-r--r-- | vcpkg/ports/scotch/portfile.cmake | 64 | ||||
| -rw-r--r-- | vcpkg/ports/scotch/vcpkg.json | 31 |
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" + ] + } + } +} |