diff --git a/metis-5.1.0.tar.gz b/metis-5.1.0.tar.gz new file mode 100644 index 0000000..a6f2aba Binary files /dev/null and b/metis-5.1.0.tar.gz differ diff --git a/metis-GKREGEX-GKRAND-LIBSUFFIX-fix.patch b/metis-GKREGEX-GKRAND-LIBSUFFIX-fix.patch new file mode 100644 index 0000000..24c59c4 --- /dev/null +++ b/metis-GKREGEX-GKRAND-LIBSUFFIX-fix.patch @@ -0,0 +1,56 @@ +--- GKlib/Makefile.orig 2013-03-11 20:50:42.000000000 +0100 ++++ GKlib/Makefile 2013-03-17 14:26:23.632867727 +0100 +@@ -41,10 +41,10 @@ + CONFIG_FLAGS += -DPCRE=$(pcre) + endif + ifneq ($(gkregex), not-set) +- CONFIG_FLAGS += -DGKREGEX=$(pcre) ++ CONFIG_FLAGS += -DGKREGEX=$(gkregex) + endif + ifneq ($(gkrand), not-set) +- CONFIG_FLAGS += -DGKRAND=$(pcre) ++ CONFIG_FLAGS += -DGKRAND=$(gkrand) + endif + ifneq ($(prefix), not-set) + CONFIG_FLAGS += -DCMAKE_INSTALL_PREFIX=$(prefix) + +--- Makefile.origin 2013-03-30 17:24:45.000000000 +0100 ++++ Makefile 2013-04-14 20:04:38.887674462 +0200 +@@ -9,6 +9,11 @@ + gklib_path = not-set + shared = not-set + cc = not-set ++libsuffix = not-set ++pcre = not-set ++gkregex = not-set ++gkrand = not-set ++ + + + # Basically proxies everything to the builddir cmake. +@@ -23,6 +28,9 @@ + ifeq ($(gklib_path), not-set) + gklib_path = GKlib + endif ++ifneq ($(libsuffix), not-set) ++ CONFIG_FLAGS += -DLIB_SUFFIX=$(libsuffix) ++endif + CONFIG_FLAGS += -DGKLIB_PATH=$(abspath $(gklib_path)) + ifneq ($(gdb), not-set) + CONFIG_FLAGS += -DGDB=$(gdb) +@@ -51,6 +59,15 @@ + ifneq ($(cc), not-set) + CONFIG_FLAGS += -DCMAKE_C_COMPILER=$(cc) + endif ++ifneq ($(pcre), not-set) ++ CONFIG_FLAGS += -DPCRE=$(pcre) ++endif ++ifneq ($(gkregex), not-set) ++ CONFIG_FLAGS += -DGKREGEX=$(gkregex) ++endif ++ifneq ($(gkrand), not-set) ++ CONFIG_FLAGS += -DGKRAND=$(gkrand) ++endif + + VERNUM=5.1.0 + PKGNAME=metis-$(VERNUM) diff --git a/metis-libmetis.patch b/metis-libmetis.patch new file mode 100644 index 0000000..919812d --- /dev/null +++ b/metis-libmetis.patch @@ -0,0 +1,20 @@ +--- libmetis/CMakeLists.orig.txt 2011-06-22 19:47:13.000000000 +0200 ++++ libmetis/CMakeLists.txt 2013-03-15 17:13:19.948911972 +0100 +@@ -4,13 +4,14 @@ + file(GLOB metis_sources *.c) + # Build libmetis. + add_library(metis ${METIS_LIBRARY_TYPE} ${GKlib_sources} ${metis_sources}) ++set_target_properties(metis PROPERTIES SOVERSION 0) + if(UNIX) + target_link_libraries(metis m) + endif() + + if(METIS_INSTALL) + install(TARGETS metis +- LIBRARY DESTINATION lib +- RUNTIME DESTINATION lib +- ARCHIVE DESTINATION lib) ++ LIBRARY DESTINATION lib${LIB_SUFFIX} ++ RUNTIME DESTINATION lib${LIB_SUFFIX} ++ ARCHIVE DESTINATION lib${LIB_SUFFIX}) + endif() diff --git a/metis-pcre2.patch b/metis-pcre2.patch new file mode 100644 index 0000000..d618ea2 --- /dev/null +++ b/metis-pcre2.patch @@ -0,0 +1,22 @@ +--- GKlib/GKlib.orig.h 2013-03-30 17:24:45.000000000 +0100 ++++ GKlib/GKlib.h 2019-02-05 14:45:44.051629682 +0100 +@@ -43,7 +43,7 @@ + #include + + #if defined(__WITHPCRE__) +- #include ++ #include + #else + #if defined(USE_GKREGEX) + #include "gkregex.h" +--- GKlib/test/Makefile.in.orig.old 2013-03-30 17:24:45.000000000 +0100 ++++ GKlib/test/Makefile.in.old 2019-02-05 15:04:35.009847901 +0100 +@@ -196,7 +196,7 @@ + + #Libraries needed for linking + LIBSDIR = -L$(BUILDDIR) -L$(GKLIBBUILDDIR) -L$(HOME)/local/lib +- LIBS = -lGKlib -lpcreposix -lpcre -lz -lm ++ LIBS = -lGKlib -lpcre2-posix -lz -lm + + # Standard file extensions + OBJEXT = .o diff --git a/metis-shared-GKlib.patch b/metis-shared-GKlib.patch new file mode 100644 index 0000000..acfa59e --- /dev/null +++ b/metis-shared-GKlib.patch @@ -0,0 +1,21 @@ +--- GKlib/CMakeLists.orig.txt 2013-03-11 20:50:14.000000000 +0100 ++++ GKlib/CMakeLists.txt 2013-03-17 19:53:44.220827579 +0100 +@@ -7,7 +7,7 @@ + include(GKlibSystem.cmake) + + include_directories(".") +-add_library(GKlib STATIC ${GKlib_sources}) ++add_library(GKlib SHARED ${GKlib_sources}) + if(UNIX) + target_link_libraries(GKlib m) + endif(UNIX) +@@ -16,6 +16,6 @@ + add_subdirectory("test") + + install(TARGETS GKlib +- ARCHIVE DESTINATION lib +- LIBRARY DESTINATION lib) +-install(FILES ${GKlib_includes} DESTINATION include) ++ ARCHIVE DESTINATION lib${LIB_SUFFIX} ++ LIBRARY DESTINATION lib${LIB_SUFFIX}) ++install(FILES ${GKlib_includes} DESTINATION include/metis) diff --git a/metis-width-datatype.patch b/metis-width-datatype.patch new file mode 100644 index 0000000..f583d05 --- /dev/null +++ b/metis-width-datatype.patch @@ -0,0 +1,12 @@ +--- include/metis.orig.h 2013-03-11 20:50:00.000000000 +0100 ++++ include/metis.h 2013-03-16 12:14:59.117329640 +0100 +@@ -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 64 + + + /*-------------------------------------------------------------------------- + diff --git a/metis.spec b/metis.spec new file mode 100644 index 0000000..99915ef --- /dev/null +++ b/metis.spec @@ -0,0 +1,229 @@ +%undefine _ld_as_needed + +%if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64 +%global arch64 1 +%else +%global arch64 0 +%endif + +Name: metis +Version: 5.1.0 +Release: 1 +Summary: Serial Graph Partitioning and Fill-reducing Matrix Ordering +License: ASL 2.0 and BSD and LGPLv2+ +URL: http://glaros.dtc.umn.edu/gkhome/views/%{name} +Source0: http://glaros.dtc.umn.edu/gkhome/fetch/sw/%{name}/%{name}-%{version}.tar.gz + +Patch0: %{name}-libmetis.patch +Patch1: %{name}-shared-GKlib.patch +Patch2: %{name}-width-datatype.patch +Patch3: %{name}-GKREGEX-GKRAND-LIBSUFFIX-fix.patch +Patch4: %{name}_lib64.patch +Patch5: %{name}-pcre2.patch + +BuildRequires: make cmake gcc gcc-c++ pcre2-devel help2man chrpath + +%description +METIS is a set of serial programs for partitioning graphs, +partitioning finite element meshes, and producing fill reducing +orderings for sparse matrices. +The algorithms implemented in METIS are based on the multilevel +recursive-bisection, multilevel k-way, and multi-constraint +partitioning schemes developed in our lab. +METIS is distributed with OpenMP support. + + +%package devel +Summary: METIS headers and development-related files +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Header and library files of Metis. + + +%if 0%{?arch64} +%package -n metis64 +Summary: Serial Graph Partitioning and Fill-reducing Matrix Ordering (64bit INTEGER) + +%description -n metis64 +METIS is a set of serial programs for partitioning graphs, +partitioning finite element meshes, and producing fill reducing +orderings for sparse matrices. +The algorithms implemented in METIS are based on the multilevel +recursive-bisection, multilevel k-way, and multi-constraint +partitioning schemes developed in our lab. +METIS is distributed with OpenMP support. +This build has 64bit INTEGER support. + + +%package -n metis64-devel +Summary: METIS development libraries (64bit INTEGER) +Requires: metis64%{?_isa} = %{version}-%{release} + +%description -n metis64-devel +Header and library files of Metis, +OpenMP version (64bit INTEGER). +%endif + +%prep +%setup -qc + +pushd %{name}-%{version} +%patch0 -p0 +%patch1 -p0 +%patch3 -p0 +%patch5 -p0 + +## Remove default compiler flag +sed -e 's|-O3||g' -i GKlib/GKlibSystem.cmake +popd + +%if 0%{?arch64} +%{__cp} -a %{name}-%{version} metis64 +%endif + + +%build +PCRE_LDFLAGS="-lpcre2-posix" + +%cmake -S %{name}-%{version} -B %{name}-%{version}/build \ + -DCMAKE_BUILD_TYPE:STRING=Release \ + -DGKLIB_PATH=%{name}-%{version}/GKlib \ + -DSHARED:BOOL=TRUE \ + -DOPENMP:BOOL=ON \ + -DPCRE:BOOL=ON \ + -DCMAKE_C_FLAGS:STRING="%{optflags} -pthread" \ + -DCMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING="%{__global_ldflags} $PCRE_LDFLAGS" \ + -DCMAKE_EXE_LINKER_FLAGS_RELEASE:STRING="%{__global_ldflags} $PCRE_LDFLAGS" \ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \ + -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} + +%make_build -C %{name}-%{version}/build + +%if 0%{?arch64} +cd metis64 +patch -p0 < %{PATCH2} +patch -p0 < %{PATCH4} +cd .. +mkdir -p metis64/build64 +PCRE_LDFLAGS="-lpcre2-posix" + +%cmake -S metis64 -B metis64/build64 \ + -DCMAKE_BUILD_TYPE:STRING=Release \ + -DGKLIB_PATH=metis64/GKlib \ + -DSHARED:BOOL=TRUE \ + -DOPENMP:BOOL=ON \ + -DPCRE:BOOL=ON \ + -DCMAKE_C_FLAGS:STRING="%{optflags} -pthread" \ + -DCMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING="%{__global_ldflags} $PCRE_LDFLAGS" \ + -DCMAKE_EXE_LINKER_FLAGS_RELEASE:STRING="%{__global_ldflags} $PCRE_LDFLAGS" \ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \ + -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} .. + +%make_build -C metis64/build64 +%endif + + +%install +pushd %{name}-%{version}/build +%make_install + +## Generate manpages from binaries +LD_PRELOAD=%{buildroot}%{_libdir}/lib%{name}.so.0 \ +help2man --version-string="%{version}" -n "Partitions a graph into a specified number of parts." \ + -N --output="gpmetis.1" --no-discard-stderr --help-option="-help" %{buildroot}%{_bindir}/gpmetis + +LD_PRELOAD=%{buildroot}%{_libdir}/lib%{name}.so.0 \ +help2man --version-string="%{version}" \ + -n "Computes a fill-reducing ordering of the vertices of the graph using multilevel nested dissection." \ + -N --output="ndmetis.1" --no-discard-stderr --help-option="-help" %{buildroot}%{_bindir}/ndmetis + +LD_PRELOAD=%{buildroot}%{_libdir}/lib%{name}.so.0 \ +help2man --version-string="%{version}" -n "Partitions a mesh into a specified number of parts." \ + -N --output="mpmetis.1" --no-discard-stderr --help-option="-help" %{buildroot}%{_bindir}/mpmetis + +LD_PRELOAD=%{buildroot}%{_libdir}/lib%{name}.so.0 \ +help2man --version-string="%{version}" -n "Converts a mesh into a graph that is compatible with METIS." \ + -N --output="m2gmetis.1" --no-discard-stderr -h "-help" %{buildroot}%{_bindir}/m2gmetis + +%{__mkdir_p} %{buildroot}%{_mandir}/man1 +%{__mv} *.1 %{buildroot}%{_mandir}/man1 +popd + +# Save metis.h with IDXTYPEWIDTH = 32 +%{__mv} %{buildroot}%{_includedir}/metis.h %{buildroot}%{_includedir}/metis32.h + +%if 0%{?arch64} +pushd metis64/build64 +%make_install +# Save metis.h with IDXTYPEWIDTH = 64 +%{__mv} %{buildroot}%{_includedir}/metis.h %{buildroot}%{_includedir}/metis64.h +popd +%endif + +# Save metis.h with IDXTYPEWIDTH = 32 +%{__mv} %{buildroot}%{_includedir}/metis32.h %{buildroot}%{_includedir}/metis.h + +## Remove rpaths +chrpath -d %{buildroot}%{_bindir}/* + + +%check +%{__cp} -p %{buildroot}%{_bindir}/* %{name}-%{version}/graphs +pushd %{name}-%{version}/graphs +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./ndmetis mdual.graph +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./mpmetis metis.mesh 2 +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./gpmetis test.mgraph 4 +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./gpmetis copter2.graph 4 +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./graphchk 4elt.graph + +%if 0%{?arch64} +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./ndmetis64 mdual.graph +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./mpmetis64 metis.mesh 2 +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./gpmetis64 test.mgraph 4 +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./gpmetis64 copter2.graph 4 +LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./graphchk64 4elt.graph +%endif +popd + + +%files +%doc %{name}-%{version}/Changelog %{name}-%{version}/manual/manual.pdf +%license %{name}-%{version}/LICENSE.txt +%{_bindir}/cmpfillin +%{_bindir}/gpmetis +%{_bindir}/graphchk +%{_bindir}/m2gmetis +%{_bindir}/mpmetis +%{_bindir}/ndmetis +%{_mandir}/man1/*.1.gz +%{_libdir}/lib%{name}.so.* + + +%files devel +%{_includedir}/%{name}.h +%{_libdir}/lib%{name}.so + + +%if 0%{?arch64} +%files -n metis64 +%doc metis64/Changelog metis64/manual/manual.pdf +%license metis64/LICENSE.txt +%{_bindir}/cmpfillin64 +%{_bindir}/gpmetis64 +%{_bindir}/graphchk64 +%{_bindir}/m2gmetis64 +%{_bindir}/mpmetis64 +%{_bindir}/ndmetis64 +%{_libdir}/lib%{name}64.so.* + + +%files -n metis64-devel +%{_includedir}/%{name}64.h +%{_libdir}/lib%{name}64.so +%endif + + +%changelog +* Mon Dec 20 2021 herengui - 5.1.0-1 +- Initial package \ No newline at end of file diff --git a/metis_lib64.patch b/metis_lib64.patch new file mode 100644 index 0000000..6c51a11 --- /dev/null +++ b/metis_lib64.patch @@ -0,0 +1,52 @@ +--- libmetis/CMakeLists.orig.txt 2016-02-16 19:06:56.480139000 +0100 ++++ libmetis/CMakeLists.txt 2016-02-16 19:07:55.511134162 +0100 +@@ -3,14 +3,14 @@ + # Find sources. + file(GLOB metis_sources *.c) + # Build libmetis. +-add_library(metis ${METIS_LIBRARY_TYPE} ${GKlib_sources} ${metis_sources}) +-set_target_properties(metis PROPERTIES SOVERSION 0) ++add_library(metis64 ${METIS_LIBRARY_TYPE} ${GKlib_sources} ${metis_sources}) ++set_target_properties(metis64 PROPERTIES SOVERSION 0) + if(UNIX) +- target_link_libraries(metis m) ++ target_link_libraries(metis64 m) + endif() + + if(METIS_INSTALL) +- install(TARGETS metis ++ install(TARGETS metis64 + LIBRARY DESTINATION lib${LIB_SUFFIX} + RUNTIME DESTINATION lib${LIB_SUFFIX} + ARCHIVE DESTINATION lib${LIB_SUFFIX}) +--- programs/CMakeLists.orig.txt 2013-03-30 17:24:45.000000000 +0100 ++++ programs/CMakeLists.txt 2016-02-16 22:42:18.625946692 +0100 +@@ -2,19 +2,19 @@ + include_directories(../libmetis) + link_directories(/home/karypis/local/lib) + # Build program. +-add_executable(gpmetis gpmetis.c cmdline_gpmetis.c io.c stat.c) +-add_executable(ndmetis ndmetis.c cmdline_ndmetis.c io.c smbfactor.c) +-add_executable(mpmetis mpmetis.c cmdline_mpmetis.c io.c stat.c) +-add_executable(m2gmetis m2gmetis.c cmdline_m2gmetis.c io.c) +-add_executable(graphchk graphchk.c io.c) +-add_executable(cmpfillin cmpfillin.c io.c smbfactor.c) +-foreach(prog gpmetis ndmetis mpmetis m2gmetis graphchk cmpfillin) +- target_link_libraries(${prog} metis) ++add_executable(gpmetis64 gpmetis.c cmdline_gpmetis.c io.c stat.c) ++add_executable(ndmetis64 ndmetis.c cmdline_ndmetis.c io.c smbfactor.c) ++add_executable(mpmetis64 mpmetis.c cmdline_mpmetis.c io.c stat.c) ++add_executable(m2gmetis64 m2gmetis.c cmdline_m2gmetis.c io.c) ++add_executable(graphchk64 graphchk.c io.c) ++add_executable(cmpfillin64 cmpfillin.c io.c smbfactor.c) ++foreach(prog gpmetis64 ndmetis64 mpmetis64 m2gmetis64 graphchk64 cmpfillin64) ++ target_link_libraries(${prog} metis64) + # target_link_libraries(${prog} metis profiler) + endforeach(prog) + + if(METIS_INSTALL) +- install(TARGETS gpmetis ndmetis mpmetis m2gmetis graphchk cmpfillin ++ install(TARGETS gpmetis64 ndmetis64 mpmetis64 m2gmetis64 graphchk64 cmpfillin64 + RUNTIME DESTINATION bin) + endif() +