From c06ad87196679e8db224024a8cbd9d55c4082525 Mon Sep 17 00:00:00 2001 From: Kyle Guinn Date: Sun, 22 Mar 2020 21:52:08 -0500 Subject: [PATCH] Attempt to make arpack.pc identical when generated by CMake --- CMakeLists.txt | 51 ++++++++++++++++++-------------- Makefile.am | 4 --- SRC/Makefile.am | 5 ++++ arpack.pc.in => SRC/arpack.pc.in | 2 +- configure.ac | 3 +- 5 files changed, 37 insertions(+), 28 deletions(-) rename arpack.pc.in => SRC/arpack.pc.in (81%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 123abf9..087c9f9 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 @@ -30,6 +35,8 @@ 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") @@ -671,10 +678,32 @@ 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. +# LAPACK_LIBRARIES contains transitive deps, no need to parse BLAS_LIBRARIES. +set(ARPACK_PC_LIBS) +foreach(lib ${LAPACK_LIBRARIES}) + get_filename_component(libname ${lib} NAME) + string(REGEX REPLACE "^lib([^.]+).*$" "-l\\1" libname ${libname}) + list(APPEND ARPACK_PC_LIBS "${libname}") +endforeach() +string(REPLACE ";" " " ARPACK_PC_LIBS "${ARPACK_PC_LIBS}") +configure_file(SRC/arpack.pc.in "${PROJECT_BINARY_DIR}/SRC/arpack${LIBSUFFIX}.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 @@ -716,10 +745,6 @@ 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}) 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) @@ -731,24 +756,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}") -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/Makefile.am b/Makefile.am index fe778e4..bcafa9b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,9 +23,5 @@ 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 -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 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 81% rename from arpack.pc.in rename to SRC/arpack.pc.in index 714bcd3..59b4798 100644 --- a/arpack.pc.in +++ b/SRC/arpack.pc.in @@ -7,5 +7,5 @@ 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@ +Libs: -L${libdir} -larpack@LIBSUFFIX@ @ARPACK_PC_LIBS@ Cflags: -I${includedir}/arpack diff --git a/configure.ac b/configure.ac index c6e88b9..ae4ae78 100644 --- a/configure.ac +++ b/configure.ac @@ -254,7 +254,8 @@ 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([ARPACK_PC_LIBS], ["$LAPACK_LIBS $BLAS_LIBS"]) +AC_CONFIG_FILES([SRC/arpack$LIBSUFFIX.pc:SRC/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"])