vcpkg/ports/scotch/fix-build.patch

312 lines
11 KiB
Diff
Raw Normal View History

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 83144b41b..1cfe80d42 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,9 +41,9 @@
## ##
############################################################
-project(SCOTCH)
cmake_minimum_required(VERSION 3.10)
-enable_language(C Fortran)
+project(SCOTCH)
+enable_language(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 22a81ffbe..7746b22af 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -95,14 +95,23 @@ 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()
include(CheckPthreadAffinity)
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
@@ -174,8 +183,9 @@ if(BUILD_LIBSCOTCHMETIS)
endif(BUILD_LIBSCOTCHMETIS)
# Testing
-add_subdirectory(check)
-
+if(BUILD_TESTING)
+ add_subdirectory(check)
+endif()
####################
# Export targets #
####################
diff --git a/src/libscotch/CMakeLists.txt b/src/libscotch/CMakeLists.txt
index e3b0cb939..5ab322eca 100644
--- a/src/libscotch/CMakeLists.txt
+++ b/src/libscotch/CMakeLists.txt
@@ -503,12 +503,30 @@ 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}.${SCOTCH_RELEASE}.${SCOTCH_PATCHLEVEL})
add_dependencies(scotch parser_yy_c parser_ll_c)
-target_link_libraries(scotch PUBLIC m)
+if(NOT WIN32)
+ target_link_libraries(scotch PUBLIC m)
+endif()
target_include_directories(scotch PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
@@ -539,10 +557,14 @@ if(LIBLZMA_FOUND)
endif()
# Add thread library
-if(Threads_FOUND)
- target_compile_definitions(scotch PUBLIC COMMON_PTHREAD SCOTCH_PTHREAD)
- target_link_libraries(scotch PUBLIC Threads::Threads)
-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)
@@ -555,21 +577,7 @@ if(CMAKE_BUILD_TYPE STREQUAL Debug)
target_compile_definitions(scotch PRIVATE SCOTCH_DEBUG_LIBRARY1)
endif()
-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)
+target_link_libraries(scotch PRIVATE scotcherr)
#################
# libPTScotch #
@@ -769,10 +777,14 @@ if(BUILD_PTSCOTCH)
set_target_properties(ptscotch PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
endif(APPLE)
- if(Threads_FOUND)
- target_compile_definitions(ptscotch PUBLIC SCOTCH_PTHREAD COMMON_PTHREAD)
- target_link_libraries(ptscotch PUBLIC Threads::Threads)
- 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)
target_include_directories(ptscotcherr PUBLIC
diff --git a/src/libscotch/common_file_compress.c b/src/libscotch/common_file_compress.c
index e1ccff54d..4dc7673a6 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 648b6f053..02bd9412c 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 235d92044..6d35aeb1a 100644
--- a/src/libscotch/common_thread.h
+++ b/src/libscotch/common_thread.h
@@ -81,6 +81,8 @@ typedef struct ThreadContext_ {
union { /*+ Context save area for main thread +*/
#ifdef COMMON_PTHREAD_AFFINITY_LINUX
cpu_set_t cpusdat; /*+ Original thread mask of main thread +*/
+#else
+ void* dummy;
#endif /* COMMON_PTHREAD_AFFINITY_LINUX */
} savedat;
#endif /* COMMON_PTHREAD */
diff --git a/src/libscotch/context.c b/src/libscotch/context.c
index 6becac0af..a88da0099 100644
--- a/src/libscotch/context.c
+++ b/src/libscotch/context.c
@@ -70,7 +70,11 @@ static struct ContextValuesData_ {
#else /* ((defined SCOTCH_DETERMINISTIC) || (defined COMMON_RANDOM_FIXED_SEED)) */
0
#endif /* ((defined SCOTCH_DETERMINISTIC) || (defined COMMON_RANDOM_FIXED_SEED)) */
- }, { } };
+ }
+#ifndef _MSC_VER
+ , { }
+#endif
+ };
/***********************************/
/* */
@@ -89,6 +93,6 @@ contextOptionsInit (
Context * const contptr)
{
return (contextValuesInit (contptr, &contextvaluesdat, sizeof (contextvaluesdat),
- CONTEXTOPTIONNUMNBR, (void *) &contextvaluesdat.vinttab - (void *) &contextvaluesdat,
- CONTEXTOPTIONDBLNBR, (void *) &contextvaluesdat.vdbltab - (void *) &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 6a795aad6..582f5e201 100644
--- a/src/libscotch/parser_ll.l
+++ b/src/libscotch/parser_ll.l
@@ -85,6 +85,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 b287da4ca..bbc10b3ef 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 3974f4fce..b9149b931 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)
- 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)
@@ -110,8 +115,9 @@ endforeach()
# Targets which need special source lists
add_scotch_exe(gout gout_c.c gout_o.c)
-target_link_libraries(gout PRIVATE m)
-
+if(NOT WIN32)
+ target_link_libraries(gout PRIVATE m)
+endif()
# gpart is a special target (same source as gmap)
add_scotch_exe(gpart gmap.c gmap.h)
target_compile_definitions(gpart PRIVATE SCOTCH_COMPILE_PART)
@@ -142,10 +148,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)
- 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)