diff --git a/.gitignore b/.gitignore index 3d5bc9b..61eca04 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,8 @@ config.status libtool .deps/ arpack.pc +parpack.pc +arpackSolver.pc arpackdef.h arpackicb.h arpack-ng-config.cmake @@ -77,4 +79,4 @@ VISUAL_STUDIO/bin/ # Temporary files *~ -\#*# \ No newline at end of file +\#*# diff --git a/CHANGES b/CHANGES index d9413be..c3ef29c 100644 --- a/CHANGES +++ b/CHANGES @@ -20,7 +20,6 @@ arpack-ng - 3.8.0 * [BUG FIX] ICB using rvec/select: rvec/select turned to integer bool should be, but, is not always supported (depend on compiler, options). * extract arpackSolver.hpp from arpakmm.cpp. - * [BUG FIX] fix cmake/pc files: enable linking from outside (add blas, lapack, eigen). * arpackmm: add --slvItrPC option (PC: Jacobi, ILU). * arpackmm: add --slv LLT LDLT (for SPD matrices). * arpackmm: add --simplePrec option (to enable use of s*upd). @@ -31,6 +30,9 @@ arpack-ng - 3.8.0 [ Kyle Guinn ] * [BUG FIX]: fix 'eval: Syntax error: "(" unexpected' error at build time. + * Only build shared libraries by default. To build static libraries, use + --enable-static (autotools) or -DBUILD_SHARED_LIBS=OFF (cmake). + * Add parpack.pc and arpackSolver.pc. [ David Schwörer ] * Support of gfortran 10 diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b53d18..fb7f922 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,11 @@ endif () project(arpack C Fortran) +set(arpack_ng_MAJOR_VERSION 3) +set(arpack_ng_MINOR_VERSION 7) +set(arpack_ng_PATCH_VERSION 0) +set(arpack_ng_VERSION ${arpack_ng_MAJOR_VERSION}.${arpack_ng_MINOR_VERSION}.${arpack_ng_PATCH_VERSION}) + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) # Adopted from https://github.com/feymark/arpack.git @@ -15,6 +20,7 @@ if (POLICY CMP0042) cmake_policy (SET CMP0042 NEW) endif () +option(BUILD_SHARED_LIBS "Build shared libraries instead of static libraries" ON) option(MPI "Enable parallel support" OFF) option(ICB "Enable support for *[ae]upd_c with ISO_C_BINDING" OFF) option(ICBEXMM "Enable support for matrix market example based on ICB" OFF) @@ -29,13 +35,15 @@ option(INTERFACE64 "use the 64-bit integer interface (ILP64) for ARPACK, BLAS an set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +# We don't want this to run on every build. +option(COVERALLS "Generate coveralls data" OFF) if (COVERALLS) include(Coveralls) set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") # The no space is by design: issue in cmake. See CMP0004. - set(EXTRA_LDLAGS "${EXTRA_LDLAGS}-lgcov") + set(EXTRA_LDFLAGS "${EXTRA_LDFLAGS}-lgcov") endif() function(prefixlist list_name prefix) @@ -50,7 +58,7 @@ function(examples list_name) foreach(l ${${list_name}}) get_filename_component(lwe ${l} NAME_WE) add_executable(${lwe} ${arpackexample_DIR}/${l} ${examples_EXTRA_SRCS}) - target_link_libraries(${lwe} arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) + target_link_libraries(${lwe} arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(NAME "${lwe}_ex" COMMAND ${lwe} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endforeach() endfunction(examples) @@ -73,11 +81,12 @@ if (PYTHON3) endif () if (ICBEXMM) - find_package(Eigen3 3.3) + find_package(Eigen3 3.3 QUIET) if (NOT EIGEN3_FOUND) # If not found, piggy-back pkg-config files. message(WARNING "CMake didn't find the Eigen3 package. Try to look for pkg-config file...") find_package(PkgConfig REQUIRED) pkg_check_modules(EIGEN3 REQUIRED eigen3>=3.3) + set(EIGEN3_INCLUDE_DIR ${EIGEN3_INCLUDE_DIRS}) endif () find_program (BASH_PROGRAM bash) @@ -298,7 +307,7 @@ endif() add_library(arpack ${arpackutil_STAT_SRCS} ${arpacksrc_STAT_SRCS} ${arpacksrc_ICB}) target_link_libraries(arpack BLAS::BLAS) -target_link_libraries(arpack LAPACK::LAPACK ${EXTRA_LDLAGS}) +target_link_libraries(arpack LAPACK::LAPACK ${EXTRA_LDFLAGS}) set_target_properties(arpack PROPERTIES OUTPUT_NAME arpack${LIBSUFFIX}) set_target_properties(arpack PROPERTIES VERSION 2.1.0) set_target_properties(arpack PROPERTIES SOVERSION 2) @@ -520,7 +529,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/TESTS) add_executable(dnsimp_test TESTS/dnsimp.f TESTS/mmio.f TESTS/debug.h) set_target_properties( dnsimp_test PROPERTIES OUTPUT_NAME dnsimp ) -target_link_libraries(dnsimp_test arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) +target_link_libraries(dnsimp_test arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_custom_command(TARGET dnsimp_test POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/TESTS/testA.mtx testA.mtx ) @@ -528,39 +537,39 @@ add_test(dnsimp_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/dnsimp) if (NOT ICB) add_executable(bug_1315_single TESTS/bug_1315_single.c) - target_link_libraries(bug_1315_single arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) + target_link_libraries(bug_1315_single arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(bug_1315_single_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug_1315_single) add_executable(bug_1315_double TESTS/bug_1315_double.c) - target_link_libraries(bug_1315_double arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) + target_link_libraries(bug_1315_double arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(bug_1315_double_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug_1315_double) endif() add_executable(bug_1323 TESTS/bug_1323.f) -target_link_libraries(bug_1323 arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) +target_link_libraries(bug_1323 arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(bug_1323_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug_1323) add_executable(bug_58_double TESTS/bug_58_double.f) -target_link_libraries(bug_58_double arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) +target_link_libraries(bug_58_double arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(bug_58_double_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug_58_double) add_executable(bug_79_double_complex TESTS/bug_79_double_complex.f) -target_link_libraries(bug_79_double_complex arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) +target_link_libraries(bug_79_double_complex arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(bug_79_double_complex_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug_79_double_complex) add_executable(bug_142 TESTS/bug_142.f) -target_link_libraries(bug_142 arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) +target_link_libraries(bug_142 arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(bug_142_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug_142) add_executable(bug_142_gen TESTS/bug_142_gen.f) -target_link_libraries(bug_142_gen arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) +target_link_libraries(bug_142_gen arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(bug_142_gen_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug_142_gen) if(MPI) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/PARPACK/TESTS/MPI) add_executable(issue46 PARPACK/TESTS/MPI/issue46.f) - target_link_libraries(issue46 parpack arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) + target_link_libraries(issue46 parpack arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(issue46_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/issue46) endif() @@ -569,12 +578,12 @@ if(ICB) add_executable(icb_arpack_c TESTS/icb_arpack_c.c) target_include_directories(icb_arpack_c PUBLIC ${PROJECT_SOURCE_DIR}/ICB) # Get arpack.h - target_link_libraries(icb_arpack_c arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) + target_link_libraries(icb_arpack_c arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(icb_arpack_c_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/icb_arpack_c) add_executable(icb_arpack_cpp TESTS/icb_arpack_cpp.cpp) target_include_directories(icb_arpack_cpp PUBLIC ${PROJECT_SOURCE_DIR}/ICB) # Get arpack.hpp - target_link_libraries(icb_arpack_cpp arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) + target_link_libraries(icb_arpack_cpp arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) add_test(icb_arpack_cpp_tst ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/icb_arpack_cpp) if (ICBEXMM) @@ -582,7 +591,7 @@ if(ICB) add_executable(arpackmm EXAMPLES/MATRIX_MARKET/arpackmm.cpp) target_include_directories(arpackmm PUBLIC ${PROJECT_SOURCE_DIR}/ICB ${EIGEN3_INCLUDE_DIR}) # Get arpack.h + eigen - target_link_libraries(arpackmm arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS}) + target_link_libraries(arpackmm arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS}) configure_file(EXAMPLES/MATRIX_MARKET/As.mtx ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/As.mtx) configure_file(EXAMPLES/MATRIX_MARKET/An.mtx ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/An.mtx) configure_file(EXAMPLES/MATRIX_MARKET/Az.mtx ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Az.mtx) @@ -653,12 +662,12 @@ if(ICB) add_executable(icb_parpack_c PARPACK/TESTS/MPI/icb_parpack_c.c) target_include_directories(icb_parpack_c PUBLIC ${PROJECT_SOURCE_DIR}/ICB MPI::MPI_C) # Get parpack.h mpi.h - target_link_libraries(icb_parpack_c parpack arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS} MPI::MPI_C) + target_link_libraries(icb_parpack_c parpack arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS} MPI::MPI_C) add_test(icb_parpack_c_tst mpirun -n 2 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/icb_parpack_c) add_executable(icb_parpack_cpp PARPACK/TESTS/MPI/icb_parpack_cpp.cpp) target_include_directories(icb_parpack_cpp PUBLIC ${PROJECT_SOURCE_DIR}/ICB MPI::MPI_CXX) # Get parpack.hpp mpi.h - target_link_libraries(icb_parpack_cpp parpack arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDLAGS} MPI::MPI_CXX) + target_link_libraries(icb_parpack_cpp parpack arpack BLAS::BLAS LAPACK::LAPACK ${EXTRA_LDFLAGS} MPI::MPI_CXX) add_test(icb_parpack_cpp_tst mpirun -n 2 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/icb_parpack_cpp) endif() endif() @@ -669,16 +678,52 @@ endif() # 'make install' to the correct location include(GNUInstallDirs) +# Convert variable names to those expected by the .pc file. +set(prefix ${CMAKE_INSTALL_PREFIX}) +set(exec_prefix \${prefix}) +set(libdir \${exec_prefix}/${CMAKE_INSTALL_LIBDIR}) +set(includedir \${prefix}/${CMAKE_INSTALL_INCLUDEDIR}) +set(PACKAGE_NAME ${PROJECT_NAME}) +set(PACKAGE_VERSION ${arpack_ng_VERSION}) +set(PACKAGE_URL "https://github.com/opencollab/arpack-ng/") + +# Convert (LAPACK|BLAS)_LIBRARIES to -l flags, store in ARPACK_PC_LIBS_PRIVATE. +# LAPACK_LIBRARIES contains transitive deps, no need to parse BLAS_LIBRARIES. +set(ARPACK_PC_LIBS_PRIVATE) +foreach(lib ${LAPACK_LIBRARIES}) + get_filename_component(libname ${lib} NAME) + string(REGEX REPLACE "^lib([^.]+).*$" "-l\\1" libname ${libname}) + list(APPEND ARPACK_PC_LIBS_PRIVATE "${libname}") +endforeach() +string(REPLACE ";" " " ARPACK_PC_LIBS_PRIVATE "${ARPACK_PC_LIBS_PRIVATE}") + +set(PARPACK_PC_LIBS_PRIVATE) +foreach(lib ${LAPACK_LIBRARIES} ${MPI_Fortran_LIBRARIES}) + get_filename_component(libname ${lib} NAME) + string(REGEX REPLACE "^lib([^.]+).*$" "-l\\1" libname ${libname}) + list(APPEND PARPACK_PC_LIBS_PRIVATE "${libname}") +endforeach() +string(REPLACE ";" " " PARPACK_PC_LIBS_PRIVATE "${PARPACK_PC_LIBS_PRIVATE}") + +configure_file(SRC/arpack.pc.in "${PROJECT_BINARY_DIR}/SRC/arpack${LIBSUFFIX}.pc" @ONLY) +configure_file(PARPACK/SRC/MPI/parpack.pc.in "${PROJECT_BINARY_DIR}/PARPACK/SRC/MPI/parpack${LIBSUFFIX}.pc" @ONLY) +configure_file(EXAMPLES/MATRIX_MARKET/arpackSolver.pc.in "${PROJECT_BINARY_DIR}/EXAMPLES/MATRIX_MARKET/arpackSolver.pc" @ONLY) + + install(TARGETS arpack ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES "${PROJECT_BINARY_DIR}/SRC/arpack${LIBSUFFIX}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) if (MPI) install(TARGETS parpack ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES "${PROJECT_BINARY_DIR}/PARPACK/SRC/MPI/parpack${LIBSUFFIX}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) endif () if(ICB) @@ -690,6 +735,7 @@ if(ICB) endif() if (ICBEXMM) install(FILES EXAMPLES/MATRIX_MARKET/arpackSolver.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/arpack) + install(FILES "${PROJECT_BINARY_DIR}/EXAMPLES/MATRIX_MARKET/arpackSolver.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) endif() endif() @@ -713,13 +759,9 @@ install(FILES "${PROJECT_BINARY_DIR}/arpackicb.h" DESTINATION ${CMAKE_INSTALL_IN # Provide find_package for arpack-ng to users. configure_file(arpack-ng-config.cmake.in "${PROJECT_BINARY_DIR}/arpack-ng-config.cmake" @ONLY) -install(FILES "${PROJECT_BINARY_DIR}/arpack-ng-config.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) # find_package(arpack-ng) -set(arpack_ng_MAJOR_VERSION 3) -set(arpack_ng_MINOR_VERSION 7) -set(arpack_ng_PATCH_VERSION 0) -set(arpack_ng_VERSION ${arpack_ng_MAJOR_VERSION}.${arpack_ng_MINOR_VERSION}.${arpack_ng_PATCH_VERSION}) +install(FILES "${PROJECT_BINARY_DIR}/arpack-ng-config.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/arpack-ng) # find_package(arpack-ng) configure_file(arpack-ng-config-version.cmake.in "${PROJECT_BINARY_DIR}/arpack-ng-config-version.cmake" @ONLY) -install(FILES "${PROJECT_BINARY_DIR}/arpack-ng-config-version.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) +install(FILES "${PROJECT_BINARY_DIR}/arpack-ng-config-version.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/arpack-ng) # Packaging: ease arpack-ng distribution (precompiled binaries and sources tarballs). set(CPACK_VERSION_MAJOR "${arpack_ng_MAJOR_VERSION}") @@ -729,25 +771,6 @@ set(CPACK_SOURCE_IGNORE_FILES "/BUILD/" "/Build/" "/build/" "/local/") # Do not set(CPACK_SOURCE_PACKAGE_FILE_NAME "arpack-ng-${CPACK_VERSION_MAJOR}.${CPACK_VERSION_MINOR}.${CPACK_VERSION_PATCH}") include(CPack) -# Convert variable names to those expected by the .pc file. -set(prefix ${CMAKE_INSTALL_PREFIX}) -set(exec_prefix \${prefix}) -set(libdir \${exec_prefix}/${CMAKE_INSTALL_LIBDIR}) -set(includedir \${prefix}/${CMAKE_INSTALL_INCLUDEDIR}) -set(PACKAGE_NAME ${PROJECT_NAME}) -set(PACKAGE_VERSION ${arpack_ng_VERSION}) -set(PACKAGE_URL "https://github.com/opencollab/arpack-ng/") -set(LAPACK_LIBS "${LAPACK_LIBRARIES}") -set(BLAS_LIBS "${BLAS_LIBRARIES}") -set(EIGEN3_CFLAGS "-I${EIGEN3_INCLUDE_DIR}") -configure_file(arpack.pc.in arpack${LIBSUFFIX}.pc @ONLY) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/arpack${LIBSUFFIX}.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - -# We don't want this to run on every build. -option(COVERALLS "Generate coveralls data" OFF) - - if (COVERALLS) set(arpack_TST_SRC ${arpack_SOURCE_DIR}/TESTS/bug_1323.f diff --git a/EXAMPLES/MATRIX_MARKET/Makefile.am b/EXAMPLES/MATRIX_MARKET/Makefile.am index 91e7892..cc2b7cc 100644 --- a/EXAMPLES/MATRIX_MARKET/Makefile.am +++ b/EXAMPLES/MATRIX_MARKET/Makefile.am @@ -1,18 +1,25 @@ LDADD = $(top_builddir)/SRC/libarpack$(LIBSUFFIX).la AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)/ICB $(EIGEN3_CFLAGS) +pkgincludedir = $(includedir)/arpack + EXTRA_DIST = README check_PROGRAMS = arpackmm dist_check_SCRIPTS = arpackmm.sh dist_check_DATA = An.mtx As.mtx Az.mtx B.mtx Bz.mtx -SH_LOG_COMPILER = bash TESTS = arpackmm.sh arpackmm_SOURCES = arpackmm.cpp if ICBEXMM pkginclude_HEADERS = arpackSolver.hpp +pkgconfig_DATA = arpackSolver.pc endif -CLEANFILES = arpackmm.resid.out arpackmm.v.out +CLEANFILES = \ + arpackmm.run.log \ + arpackmm.resid.out \ + arpackmm.v.out \ + arpackSolver.resid.out \ + arpackSolver.v.out diff --git a/EXAMPLES/MATRIX_MARKET/arpackSolver.pc.in b/EXAMPLES/MATRIX_MARKET/arpackSolver.pc.in new file mode 100644 index 0000000..5f92aeb --- /dev/null +++ b/EXAMPLES/MATRIX_MARKET/arpackSolver.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +includedir=@includedir@ + +Name: arpackSolver +Description: Utility to test arpack with matrix market files +Version: @PACKAGE_VERSION@ +URL: @PACKAGE_URL@ +Requires: arpack, eigen3 >= 3.3 +Cflags: -I${includedir}/arpack diff --git a/Makefile.am b/Makefile.am index fe778e4..f71acd6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,6 +10,9 @@ endif if ICB AM_DISTCHECK_CONFIGURE_FLAGS += --enable-icb endif +if ICBEXMM +AM_DISTCHECK_CONFIGURE_FLAGS += --enable-icb-exmm +endif SUBDIRS = . if ICB @@ -21,11 +24,7 @@ SUBDIRS += PARPACK endif EXTRA_DIST = README.md PARPACK_CHANGES CHANGES DOCUMENTS VISUAL_STUDIO \ -detect_arpack_bug.m4 CMakeLists.txt arpack-ng-config.cmake.in arpack-ng-config-version.cmake.in +detect_arpack_bug.m4 CMakeLists.txt -pkgconfig_DATA = arpack@LIBSUFFIX@.pc - -cmkdir = $(prefix)/lib/cmake -cmk_DATA = arpack-ng-config.cmake arpack-ng-config-version.cmake - -DISTCLEANFILES = $(pkgconfig_DATA) arpackdef.h arpack-ng-config.cmake arpack-ng-config-version.cmake +cmakedir = $(libdir)/cmake/arpack-ng +cmake_DATA = arpack-ng-config.cmake arpack-ng-config-version.cmake diff --git a/PARPACK/SRC/MPI/Makefile.am b/PARPACK/SRC/MPI/Makefile.am index e5198d4..72b0a85 100644 --- a/PARPACK/SRC/MPI/Makefile.am +++ b/PARPACK/SRC/MPI/Makefile.am @@ -46,3 +46,8 @@ if ICB libparpack@LIBSUFFIX@_la_LIBADD += $(top_builddir)/ICB/libdbgicb.la $(top_builddir)/ICB/libstaicb.la libparpack@LIBSUFFIX@_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_builddir) endif + +pkgconfig_DATA = parpack@LIBSUFFIX@.pc + +# Due to the LIBSUFFIX, configure doesn't automatically clean this file: +DISTCLEANFILES = parpack@LIBSUFFIX@.pc diff --git a/PARPACK/SRC/MPI/parpack.pc.in b/PARPACK/SRC/MPI/parpack.pc.in new file mode 100644 index 0000000..bbc75c7 --- /dev/null +++ b/PARPACK/SRC/MPI/parpack.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ + +Name: @PACKAGE_NAME@ +Description: Collection of Fortran77 subroutines designed to solve large scale eigenvalue problems +Version: @PACKAGE_VERSION@ +URL: @PACKAGE_URL@ +Requires.private: arpack@LIBSUFFIX@ +Libs: -L${libdir} -lparpack@LIBSUFFIX@ +Libs.private: @PARPACK_PC_LIBS_PRIVATE@ diff --git a/SRC/Makefile.am b/SRC/Makefile.am index 97b0e84..8471035 100644 --- a/SRC/Makefile.am +++ b/SRC/Makefile.am @@ -33,3 +33,8 @@ if ICB libarpack@LIBSUFFIX@_la_LIBADD += $(top_builddir)/ICB/libdbgicb.la $(top_builddir)/ICB/libstaicb.la libarpack@LIBSUFFIX@_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_builddir) endif + +pkgconfig_DATA = arpack@LIBSUFFIX@.pc + +# Due to the LIBSUFFIX, configure doesn't automatically clean this file: +DISTCLEANFILES = arpack@LIBSUFFIX@.pc diff --git a/arpack.pc.in b/SRC/arpack.pc.in similarity index 69% rename from arpack.pc.in rename to SRC/arpack.pc.in index 77044b4..a5550ce 100644 --- a/arpack.pc.in +++ b/SRC/arpack.pc.in @@ -7,5 +7,6 @@ Name: @PACKAGE_NAME@ Description: Collection of Fortran77 subroutines designed to solve large scale eigenvalue problems Version: @PACKAGE_VERSION@ URL: @PACKAGE_URL@ -Libs: -L${libdir} -larpack@LIBSUFFIX@ @LAPACK_LIBS@ @BLAS_LIBS@ -Cflags: -I${includedir}/arpack @EIGEN3_CFLAGS@ +Libs: -L${libdir} -larpack@LIBSUFFIX@ +Libs.private: @ARPACK_PC_LIBS_PRIVATE@ +Cflags: -I${includedir}/arpack diff --git a/arpack-ng-config-version.cmake.in b/arpack-ng-config-version.cmake.in index 1d3a8f0..f6e945c 100644 --- a/arpack-ng-config-version.cmake.in +++ b/arpack-ng-config-version.cmake.in @@ -1,5 +1,5 @@ # Check whether the requested PACKAGE_FIND_VERSION is compatible -set(PACKAGE_VERSION "@arpack_ng_VERSION@") +set(PACKAGE_VERSION "@PACKAGE_VERSION@") if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE FALSE) else() diff --git a/arpack-ng-config.cmake.in b/arpack-ng-config.cmake.in index c5b6041..b8c011b 100644 --- a/arpack-ng-config.cmake.in +++ b/arpack-ng-config.cmake.in @@ -3,32 +3,23 @@ # To use arpack from CMake, use ARPACK::ARPACK target: # find_package(arpack-ng) # add_executable(main main.f) -# target_include_directories(main PUBLIC ARPACK::ARPACK) +# target_include_directories(main PRIVATE ARPACK::ARPACK) # target_link_libraries(main ARPACK::ARPACK) # # To use parpack from CMake, use PARPACK::PARPACK target: # find_package(arpack-ng) # add_executable(main main.f) -# target_include_directories(main PUBLIC PARPACK::PARPACK) # target_link_libraries(main PARPACK::PARPACK) # Create local variables. -set(arpack_ng_INCLUDE_DIRS "@CMAKE_INSTALL_FULL_INCLUDEDIR@/arpack;@EIGEN3_INCLUDE_DIR@;${MPI_Fortran_INCLUDE_DIRS};${MPI_C_INCLUDE_DIRS};${MPI_CXX_INCLUDE_DIRS}") -if(EXISTS "@CMAKE_INSTALL_FULL_LIBDIR@/libarpack.a") - set(arpack_ng_LIBRARIES "@CMAKE_INSTALL_FULL_LIBDIR@/libarpack.a;@LAPACK_LIBRARIES@;@BLAS_LIBRARIES@") -elseif(EXISTS "@CMAKE_INSTALL_FULL_LIBDIR@/libarpack.so") - set(arpack_ng_LIBRARIES "@CMAKE_INSTALL_FULL_LIBDIR@/libarpack.so;@LAPACK_LIBRARIES@;@BLAS_LIBRARIES@") -endif() -if(EXISTS "@CMAKE_INSTALL_FULL_LIBDIR@/libparpack.a") - set(parpack_ng_LIBRARIES "@CMAKE_INSTALL_FULL_LIBDIR@/libparpack.a;${arpack_ng_LIBRARIES};${MPI_Fortran_LIBRARIES};${MPI_C_LIBRARIES};${MPI_CXX_LIBRARIES}") -elseif(EXISTS "@CMAKE_INSTALL_FULL_LIBDIR@/libparpack.so") - set(parpack_ng_LIBRARIES "@CMAKE_INSTALL_FULL_LIBDIR@/libparpack.so;${arpack_ng_LIBRARIES};${MPI_Fortran_LIBRARIES};${MPI_C_LIBRARIES};${MPI_CXX_LIBRARIES}") -endif() +set(prefix "@prefix@") +set(exec_prefix "@exec_prefix@") +set(libdir "@libdir@") +set(includedir "@includedir@") # Create arpack targets. add_library(ARPACK::ARPACK INTERFACE IMPORTED) -set_target_properties(ARPACK::ARPACK PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${arpack_ng_INCLUDE_DIRS}") -set_target_properties(ARPACK::ARPACK PROPERTIES INTERFACE_LINK_LIBRARIES "${arpack_ng_LIBRARIES}") +set_target_properties(ARPACK::ARPACK PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${includedir}/arpack") +set_target_properties(ARPACK::ARPACK PROPERTIES INTERFACE_LINK_LIBRARIES "arpack") add_library(PARPACK::PARPACK INTERFACE IMPORTED) -set_target_properties(PARPACK::PARPACK PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${arpack_ng_INCLUDE_DIRS}") -set_target_properties(PARPACK::PARPACK PROPERTIES INTERFACE_LINK_LIBRARIES "${parpack_ng_LIBRARIES}") +set_target_properties(PARPACK::PARPACK PROPERTIES INTERFACE_LINK_LIBRARIES "parpack") diff --git a/configure.ac b/configure.ac index ee0338b..b197cbf 100644 --- a/configure.ac +++ b/configure.ac @@ -12,7 +12,6 @@ AC_PROG_FC AC_PROG_CC AC_PROG_CXX PKG_PROG_PKG_CONFIG -AC_PROG_SED dnl Check for BLAS libraries AX_BLAS([], [AC_MSG_ERROR([cannot find BLAS libraries])]) @@ -46,7 +45,7 @@ ifdef([LT_INIT], [], [ m4exit([1])]) LT_PREREQ([2.4.2]) -LT_INIT([win32-dll]) +LT_INIT([win32-dll disable-static]) dnl See if compiling parpack AC_ARG_ENABLE([mpi], @@ -86,7 +85,7 @@ AC_ARG_ENABLE([icb-exmm], [AS_VAR_SET([enable_icb_exmm], [no])]) if test x"$enable_icb_exmm" != x"no"; then - PKG_CHECK_MODULES([EIGEN3], [eigen3 >= 3.3], [], [AC_MSG_ERROR([Eigen not found. Give hints with PKG_CONFIG_PATH. Disable the need of this dependency using --disable-icb-exmm])]) + PKG_CHECK_MODULES([EIGEN3], [eigen3 >= 3.3]) AC_LANG_PUSH([C++]) CPPFLAGS_SAVE=$CPPFLAGS CPPFLAGS=$EIGEN3_CFLAGS @@ -255,21 +254,19 @@ AM_CONDITIONAL([ICB], [test x"$enable_icb" != x"no"]) AM_CONDITIONAL([ICBEXMM], [test x"$enable_icb_exmm" != x"no"]) m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_SUBST([pkgconfigdir], [${libdir}/pkgconfig])]) -AC_CONFIG_FILES([arpack$LIBSUFFIX.pc:arpack.pc.in], [], [LIBSUFFIX="$LIBSUFFIX"]) - -AC_SUBST([CMAKE_INSTALL_FULL_LIBDIR], ["$libdir"]) # FIXME: need to recursively expand these -AC_SUBST([CMAKE_INSTALL_FULL_INCLUDEDIR], ["$includedir"]) -AC_SUBST([BLAS_LIBRARIES], ["$BLAS_LIBS"]) # FIXME: need a filename, not a -l flag -AC_SUBST([LAPACK_LIBRARIES], ["$LAPACK_LIBS"]) -AC_SUBST([EIGEN3_INCLUDE_DIR], [`echo "$EIGEN3_CFLAGS" | sed -e s/-I//`]) -AC_CONFIG_FILES([arpack-ng-config.cmake]) - -AC_SUBST([arpack_ng_VERSION], ["$VERSION"]) -AC_CONFIG_FILES([arpack-ng-config-version.cmake]) +AC_SUBST([ARPACK_PC_LIBS_PRIVATE], ["$LAPACK_LIBS $BLAS_LIBS"]) +AC_SUBST([PARPACK_PC_LIBS_PRIVATE], ["$LAPACK_LIBS $BLAS_LIBS $MPI_Fortran_LIBS"]) +AC_CONFIG_FILES([ + SRC/arpack$LIBSUFFIX.pc:SRC/arpack.pc.in + PARPACK/SRC/MPI/parpack$LIBSUFFIX.pc:PARPACK/SRC/MPI/parpack.pc.in +], [], [LIBSUFFIX="$LIBSUFFIX"]) AC_CONFIG_FILES([ + EXAMPLES/MATRIX_MARKET/arpackSolver.pc arpackdef.h arpackicb.h + arpack-ng-config-version.cmake + arpack-ng-config.cmake Makefile ICB/Makefile UTIL/Makefile diff --git a/m4/ax_blas.m4 b/m4/ax_blas.m4 index 821459d..9571905 100644 --- a/m4/ax_blas.m4 +++ b/m4/ax_blas.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_blas.html +# https://www.gnu.org/software/autoconf-archive/ax_blas.html # =========================================================================== # # SYNOPSIS @@ -36,6 +36,7 @@ # LICENSE # # Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2019 Geoffrey M. Oxberry # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the @@ -48,7 +49,7 @@ # Public License for more details. # # You should have received a copy of the GNU General Public License along -# with this program. If not, see . +# with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure @@ -63,11 +64,11 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 14 +#serial 17 AU_ALIAS([ACX_BLAS], [AX_BLAS]) AC_DEFUN([AX_BLAS], [ -AC_PREREQ(2.50) +AC_PREREQ([2.55]) AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) AC_REQUIRE([AC_CANONICAL_HOST]) ax_blas_ok=no @@ -77,7 +78,9 @@ AC_ARG_WITH(blas, case $with_blas in yes | "") ;; no) ax_blas_ok=disable ;; - -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; + -* | */* | *.a | *.so | *.so.* | *.dylib | *.dylib.* | *.o) + BLAS_LIBS="$with_blas" + ;; *) BLAS_LIBS="-l$with_blas" ;; esac @@ -93,7 +96,7 @@ if test $ax_blas_ok = no; then if test "x$BLAS_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS]) - AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""]) + AC_LINK_IFELSE([AC_LANG_CALL([], [$sgemm])], [ax_blas_ok=yes], [BLAS_LIBS=""]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi @@ -103,7 +106,7 @@ fi if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS" AC_MSG_CHECKING([if $sgemm is being linked in already]) - AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes]) + AC_LINK_IFELSE([AC_LANG_CALL([], [$sgemm])], [ax_blas_ok=yes]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi @@ -174,7 +177,7 @@ fi if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" AC_MSG_CHECKING([for $sgemm in -framework vecLib]) - AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) + AC_LINK_IFELSE([AC_LANG_CALL([], [$sgemm])], [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi diff --git a/m4/ax_lapack.m4 b/m4/ax_lapack.m4 index 6aa16aa..abaff9d 100644 --- a/m4/ax_lapack.m4 +++ b/m4/ax_lapack.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_lapack.html +# https://www.gnu.org/software/autoconf-archive/ax_lapack.html # =========================================================================== # # SYNOPSIS @@ -37,6 +37,7 @@ # LICENSE # # Copyright (c) 2009 Steven G. Johnson +# Copyright (c) 2019 Geoffrey M. Oxberry # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the @@ -49,7 +50,7 @@ # Public License for more details. # # You should have received a copy of the GNU General Public License along -# with this program. If not, see . +# with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure @@ -64,7 +65,7 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 7 +#serial 10 AU_ALIAS([ACX_LAPACK], [AX_LAPACK]) AC_DEFUN([AX_LAPACK], [ @@ -76,7 +77,9 @@ AC_ARG_WITH(lapack, case $with_lapack in yes | "") ;; no) ax_lapack_ok=disable ;; - -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; + -* | */* | *.a | *.so | *.so.* | *.dylib | *.dylib.* | *.o) + LAPACK_LIBS="$with_lapack" + ;; *) LAPACK_LIBS="-l$with_lapack" ;; esac @@ -93,7 +96,7 @@ fi if test "x$LAPACK_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" AC_MSG_CHECKING([for $cheev in $LAPACK_LIBS]) - AC_TRY_LINK_FUNC($cheev, [ax_lapack_ok=yes], [LAPACK_LIBS=""]) + AC_LINK_IFELSE([AC_LANG_CALL([], [$cheev])], [ax_lapack_ok=yes], [LAPACK_LIBS=""]) AC_MSG_RESULT($ax_lapack_ok) LIBS="$save_LIBS" if test $ax_lapack_ok = no; then