File CCfits-cmake-install-pkgconfig.patch of Package CCfits

From 65eaf9ac82b20436b156fbc33a3f331cc7ce87cd Mon Sep 17 00:00:00 2001
From: Atri Bhattacharya <badshah400@gmail.org>
Date: Sat, 10 May 2025 11:35:25 +0530
Subject: [PATCH] Fix pkg-config installation when using cmake.

---
 CCfits.pc.cmake          |  12 +++
 CCfits.pc.in             |   6 +-
 CMakeLists.txt           | 202 +++++++++++++++++++++++++++++----------
 cmake/CCfitsConfig.cmake |   1 +
 4 files changed, 166 insertions(+), 55 deletions(-)
 create mode 100644 CCfits.pc.cmake
 create mode 100644 cmake/CCfitsConfig.cmake

diff --git a/CCfits.pc.cmake b/CCfits.pc.cmake
new file mode 100644
index 0000000..7fd6d44
--- /dev/null
+++ b/CCfits.pc.cmake
@@ -0,0 +1,12 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
+includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/CCfits
+
+Name: CCfits
+Description: Object-Oriented Interface to the CFITSIO Library
+URL: https://heasarc.gsfc.nasa.gov/fitsio/ccfits
+Requires.private: cfitsio >= 3.08
+Version: @CCFITS_MAJOR@.@CCFITS_MINOR@
+Libs: -L${libdir} -lCCfits
+Cflags: -I${includedir}
diff --git a/CCfits.pc.in b/CCfits.pc.in
index 1874c4e..4d86006 100644
--- a/CCfits.pc.in
+++ b/CCfits.pc.in
@@ -4,9 +4,9 @@ libdir=@libdir@
 includedir=@includedir@
 
 Name: CCfits
-Description: Object Oriented C++ Interface to CFITSIO Library
+Description: Object-Oriented Interface to the CFITSIO Library
+URL: https://heasarc.gsfc.nasa.gov/fitsio/ccfits
 Requires.private: cfitsio >= 3.08
-Version: 2.7
+Version: @PACKAGE_VERSION@
 Libs: -L${libdir} -lCCfits
 Cflags: -I${includedir}
-
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5a16906..8d09385 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,52 +1,47 @@
-PROJECT(CCfits)
+#==============================================================================
+# CCFITS CMakeLists.txt
+#==============================================================================
+
+# Ensure that build directory is not the source directory:
+IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
+	message(FATAL_ERROR
+		"Please create a separate directory for building CCFITS."
+		)
+ENDIF()
+
 CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
 
-# Allow the developer to select whether to build Dynamic or Static libraries
-OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+# Suppress warning about WIN32 no longer being defined on Cygwin:
+SET(CMAKE_LEGACY_CYGWIN_WIN32 0)
 
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}")
-set (LIB_DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
-set (BIN_DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
-set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include/CCfits")
+PROJECT(CCFITS
+	DESCRIPTION "An object-oriented interface to the CFITSIO library"
+	LANGUAGES CXX
+	)
 
-# Define project version
-SET(${PROJECT_NAME}_MAJOR_VERSION 2)
-SET(${PROJECT_NAME}_MINOR_VERSION 6)
-SET(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION})
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
 
+# Define project version
+#SET(${PROJECT_NAME}_SONAME _)
+SET(${PROJECT_NAME}_MAJOR 2)
+SET(${PROJECT_NAME}_MINOR 7)
+#SET(${PROJECT_NAME}_MICRO _)
+SET(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_MAJOR}.${${PROJECT_NAME}_MINOR})
+#SET(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_MAJOR}.${${PROJECT_NAME}_MINOR}.${${PROJECT_NAME}_MICRO})
 SET(LIB_NAME CCfits)
-SET (LIB_TYPE STATIC)
-IF (BUILD_SHARED_LIBS)
-  SET (LIB_TYPE SHARED)
-ENDIF (BUILD_SHARED_LIBS)
 
-#==============================================================================
-# Source code:
-#==============================================================================
+# Allow @rpath token in target install name on Macs.
+# See "cmake --help-policy CMP0042" for more information.
+IF(POLICY CMP0042)
+  CMAKE_POLICY(SET CMP0042 NEW)
+ENDIF()
 
-FILE(GLOB H_FILES "*.h")
-SET(H_FILES ${H_FILES} CCfits)
-
-SET(SRC_FILES
-    AsciiTable.cxx
-    BinTable.cxx
-    ColumnCreator.cxx
-    Column.cxx
-    ColumnData.cxx
-    ColumnVectorData.cxx
-    ExtHDU.cxx
-    FITS.cxx
-    FitsError.cxx
-    FITSUtil.cxx
-    GroupTable.cxx
-    HDUCreator.cxx
-    HDU.cxx
-    KeyData.cxx
-    KeywordCreator.cxx
-    Keyword.cxx
-    PHDU.cxx
-    Table.cxx
-)
+INCLUDE(CheckLibraryExists)
+INCLUDE(CheckFunctionExists)
+INCLUDE(CheckSymbolExists)
+INCLUDE(CheckCSourceCompiles)
+INCLUDE(GNUInstallDirs)
 
 #==============================================================================
 # Dependencies:
@@ -76,7 +71,55 @@ ELSE()
 ENDIF (${PkgConfig_FOUND})
 
 #==============================================================================
-# Target:
+# Build options:
+#==============================================================================
+
+# Allow the developer to select if Dynamic or Static libraries are built
+OPTION(BUILD_SHARED_LIBS "Build Shared Libraries" ON)
+#OPTION(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+
+OPTION(TESTS "Build cookbook test program" ON)
+
+IF(BUILD_SHARED_LIBS)
+  SET (LIB_TYPE SHARED)
+ELSE()
+  SET (LIB_TYPE STATIC)
+ENDIF(BUILD_SHARED_LIBS)
+
+#==============================================================================
+# CCFITS source code:
+#==============================================================================
+
+include(GenerateExportHeader)
+
+FILE(GLOB H_FILES "*.h")
+SET(H_FILES ${H_FILES} CCfits)
+
+SET(SRC_FILES
+    AsciiTable.cxx
+    BinTable.cxx
+    ColumnCreator.cxx
+    Column.cxx
+    ColumnData.cxx
+    ColumnVectorData.cxx
+    ExtHDU.cxx
+    FITS.cxx
+    FitsError.cxx
+    FITSUtil.cxx
+    GroupTable.cxx
+    HDUCreator.cxx
+    HDU.cxx
+    KeyData.cxx
+    KeywordCreator.cxx
+    Keyword.cxx
+    PHDU.cxx
+    Table.cxx
+)
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}")
+
+#==============================================================================
+# Add libraries:
 #==============================================================================
 
 ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${H_FILES} ${SRC_FILES})
@@ -112,15 +155,69 @@ ELSE()
 ENDIF (${PkgConfig_FOUND})
 
 #==============================================================================
-# Install:
+# Targets
 #==============================================================================
-include(GNUInstallDirs)
-install(TARGETS ${LIB_NAME}
-        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+
+generate_export_header(CCfits)
+set_property(TARGET CCfits PROPERTY VERSION ${CCFITS_VERSION})
+#set_property(TARGET CCfits PROPERTY SOVERSION 10)
+set_property(TARGET CCfits PROPERTY INTERFACE_CCfits_MAJOR_VERSION ${${PROJECT_NAME}_MAJOR})
+set_property(TARGET CCfits APPEND PROPERTY
+  COMPATIBLE_INTERFACE_STRING CCfits_MAJOR_VERSION
+)
+
+install(TARGETS CCfits EXPORT CCfitsTargets
+  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+  INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/CCfits"
 )
-install(FILES ${H_FILES} DESTINATION ${INCLUDE_INSTALL_DIR})
+
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ccfits_export.h"
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT Devel)
+
+# Install standard header files in a "CCfits" subdirectory:
+install(FILES ${H_FILES}
+  DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/CCfits" COMPONENT Devel)
+
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file(
+  "${CMAKE_CURRENT_BINARY_DIR}/CCfits/CCfitsConfigVersion.cmake"
+  VERSION ${CCFITS_VERSION}
+  COMPATIBILITY AnyNewerVersion
+)
+
+export(EXPORT CCfitsTargets
+  FILE "${CMAKE_CURRENT_BINARY_DIR}/CCfits/CCfitsTargets.cmake"
+  NAMESPACE CCFITS::
+)
+configure_file(cmake/CCfitsConfig.cmake
+  "${CMAKE_CURRENT_BINARY_DIR}/CCfits/CCfitsConfig.cmake"
+  COPYONLY
+)
+
+set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/CCfits)
+install(EXPORT CCfitsTargets
+  FILE
+    CCfitsTargets.cmake
+  NAMESPACE
+    CCFITS::
+  DESTINATION
+    ${ConfigPackageLocation}
+)
+install(
+  FILES
+    cmake/CCfitsConfig.cmake
+    "${CMAKE_CURRENT_BINARY_DIR}/CCfits/CCfitsConfigVersion.cmake"
+  DESTINATION
+    ${ConfigPackageLocation}
+  COMPONENT
+    Devel
+)
+
+# CCfits.pc:
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CCfits.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/CCfits.pc @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CCfits.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
 
 #==============================================================================
 # Tests:
@@ -134,8 +231,9 @@ IF (TESTS)
     TARGET_LINK_LIBRARIES(cookbook ${LIB_NAME} ${CFITSIO_LIBRARIES})
     ADD_TEST(cookbook cookbook)
 
-    SET(TEST_FILES file1.pha)
-    FILE(COPY ${TEST_FILES} DESTINATION ${CCfits_BINARY_DIR})
-    #FILE(COPY ${CMAKE_SOURCE_DIR}/testprog.tpt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+    # Copy file1.pha to build directory to allow quick test
+    FILE(COPY ${CMAKE_SOURCE_DIR}/file1.pha DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+    install(TARGETS cookbook RUNTIME DESTINATION bin)
 
 ENDIF(TESTS)
diff --git a/cmake/CCfitsConfig.cmake b/cmake/CCfitsConfig.cmake
new file mode 100644
index 0000000..83cb804
--- /dev/null
+++ b/cmake/CCfitsConfig.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/CCfitsTargets.cmake")
-- 
2.49.0

openSUSE Build Service is sponsored by