mirror of
https://github.com/conan-io/conan-center-index.git
synced 2025-08-15 02:58:22 +00:00
(#3695) cspice: add utilities option + extract license from source code
* add utilities * rename option * append bin to PATH if utilities enabled * extract license from main public header * explicit cpp_info.libs * don't modify source subfolder content during build
This commit is contained in:
@@ -4,8 +4,12 @@ project(cspice C)
|
||||
include(conanbuildinfo.cmake)
|
||||
conan_basic_setup()
|
||||
|
||||
file(GLOB SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder/src/cspice/*.c)
|
||||
add_library(cspice ${SRC_FILES})
|
||||
option(BUILD_UTILITIES "Build cspice utilities" ON)
|
||||
|
||||
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder/src)
|
||||
|
||||
file(GLOB CSPICE_SRC_FILES ${SRC_DIR}/cspice/*.c)
|
||||
add_library(cspice ${CSPICE_SRC_FILES})
|
||||
|
||||
if(WIN32)
|
||||
target_compile_definitions(cspice PRIVATE "_COMPLEX_DEFINED;MSDOS;OMIT_BLANK_CC;NON_ANSI_STDIO")
|
||||
@@ -15,20 +19,97 @@ elseif(UNIX)
|
||||
target_compile_options(cspice PRIVATE -ansi)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
target_link_libraries(cspice PRIVATE m)
|
||||
endif()
|
||||
|
||||
# Behavior of implicitly defined functions changed in AppleClang 12
|
||||
# https://developer.apple.com/documentation/xcode-release-notes/xcode-12-release-notes
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND
|
||||
CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "12")
|
||||
target_compile_options(cspice PRIVATE -Wno-error=implicit-function-declaration)
|
||||
target_compile_options(cspice PRIVATE -Wno-error=implicit-function-declaration)
|
||||
endif()
|
||||
|
||||
install(
|
||||
TARGETS cspice
|
||||
EXPORT cspice
|
||||
RUNTIME DESTINATION bin
|
||||
LIBRARY DESTINATION lib
|
||||
ARCHIVE DESTINATION lib
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
|
||||
file(GLOB INCLUDE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder/include/*.h)
|
||||
install(FILES ${INCLUDE_FILES} DESTINATION include)
|
||||
|
||||
if(BUILD_UTILITIES)
|
||||
# csupport is common to all utilities
|
||||
file(GLOB CSUPPORT_SRC_FILES "${SRC_DIR}/csupport/*.c")
|
||||
add_library(csupport OBJECT ${CSUPPORT_SRC_FILES})
|
||||
|
||||
# Walk into all utilities subfolders and build them (except cook_c which only contains examples)
|
||||
file(GLOB CSPICE_UTILITIES_SUBDIRS RELATIVE ${SRC_DIR} "${SRC_DIR}/*_c")
|
||||
list(REMOVE_ITEM CSPICE_UTILITIES_SUBDIRS "cook_c")
|
||||
foreach(CSPICE_SUBDIR ${CSPICE_UTILITIES_SUBDIRS})
|
||||
set(UTILITY_SRC_DIR "${SRC_DIR}/${CSPICE_SUBDIR}")
|
||||
|
||||
# Each .pgm file is the entry point of an executable
|
||||
file(GLOB PGM_FILES "${UTILITY_SRC_DIR}/*.pgm")
|
||||
|
||||
# Source files common to all executables in this subfolder
|
||||
# Ignore these files: main.c, <pgmfilename>.c, <pgmfilename>_main.c
|
||||
# (might have been pre-generated, specially in Windows source code)
|
||||
file(GLOB CSPICE_UTILITY_SRC_FILES ${UTILITY_SRC_DIR}/*.c)
|
||||
get_filename_component(MAIN_SRC_FILE "${UTILITY_SRC_DIR}/main.c" ABSOLUTE)
|
||||
list(REMOVE_ITEM CSPICE_UTILITY_SRC_FILES "${MAIN_SRC_FILE}")
|
||||
foreach(PGM_FILE ${PGM_FILES})
|
||||
get_filename_component(CSPICE_UTILITY ${PGM_FILE} NAME_WE)
|
||||
get_filename_component(PGM_MAIN_SRC_FILE "${UTILITY_SRC_DIR}/${CSPICE_UTILITY}_main.c" ABSOLUTE)
|
||||
get_filename_component(GENERIC_MAIN_SRC_FILE "${UTILITY_SRC_DIR}/${CSPICE_UTILITY}.c" ABSOLUTE)
|
||||
list(REMOVE_ITEM CSPICE_UTILITY_SRC_FILES "${PGM_MAIN_SRC_FILE}" "${GENERIC_MAIN_SRC_FILE}")
|
||||
endforeach()
|
||||
if(CSPICE_UTILITY_SRC_FILES)
|
||||
add_library(${CSPICE_SUBDIR}_commonlib OBJECT ${CSPICE_UTILITY_SRC_FILES})
|
||||
endif()
|
||||
|
||||
# Build one executable per pgm file
|
||||
foreach(PGM_FILE ${PGM_FILES})
|
||||
get_filename_component(CSPICE_UTILITY ${PGM_FILE} NAME_WE)
|
||||
|
||||
# Generate <pgm_filename>_main.c file from .pgm file
|
||||
set(PGM_MAIN_SRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/cspice_generated/${CSPICE_SUBDIR}/${CSPICE_UTILITY}_main.c")
|
||||
add_custom_target(${CSPICE_UTILITY}_PGM DEPENDS ${PGM_FILE} ${PGM_MAIN_SRC_FILE})
|
||||
add_custom_command(
|
||||
OUTPUT ${PGM_MAIN_SRC_FILE}
|
||||
DEPENDS ${PGM_FILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PGM_FILE} ${PGM_MAIN_SRC_FILE}
|
||||
)
|
||||
|
||||
# Generate <pgm_filename>.c from main.x file if it exists
|
||||
set(INPUT_MAIN_FILE "${UTILITY_SRC_DIR}/main.x")
|
||||
set(GENERIC_MAIN_SRC_FILE "")
|
||||
if(EXISTS ${INPUT_MAIN_FILE})
|
||||
set(GENERIC_MAIN_SRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/cspice_generated/${CSPICE_SUBDIR}/${CSPICE_UTILITY}.c")
|
||||
add_custom_target(${CSPICE_UTILITY}_MAIN DEPENDS ${INPUT_MAIN_FILE} ${GENERIC_MAIN_SRC_FILE})
|
||||
add_custom_command(
|
||||
OUTPUT ${GENERIC_MAIN_SRC_FILE}
|
||||
DEPENDS ${INPUT_MAIN_FILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${INPUT_MAIN_FILE} ${GENERIC_MAIN_SRC_FILE}
|
||||
)
|
||||
endif()
|
||||
|
||||
add_executable(${CSPICE_UTILITY} ${PGM_MAIN_SRC_FILE} ${GENERIC_MAIN_SRC_FILE})
|
||||
add_dependencies(${CSPICE_UTILITY} ${CSPICE_UTILITY}_PGM)
|
||||
if(TARGET ${CSPICE_UTILITY}_MAIN)
|
||||
add_dependencies(${CSPICE_UTILITY} ${CSPICE_UTILITY}_MAIN)
|
||||
endif()
|
||||
target_include_directories(${CSPICE_UTILITY} PRIVATE ${UTILITY_SRC_DIR})
|
||||
target_link_libraries(${CSPICE_UTILITY} PRIVATE csupport cspice)
|
||||
if(TARGET ${CSPICE_SUBDIR}_commonlib)
|
||||
target_link_libraries(${CSPICE_UTILITY} PRIVATE ${CSPICE_SUBDIR}_commonlib)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
target_link_libraries(${CSPICE_UTILITY} PRIVATE m)
|
||||
endif()
|
||||
install(TARGETS ${CSPICE_UTILITY} DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
endforeach()
|
||||
endforeach()
|
||||
endif()
|
||||
|
@@ -1,22 +0,0 @@
|
||||
THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE
|
||||
CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S.
|
||||
GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE
|
||||
ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE
|
||||
PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" TO
|
||||
THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY
|
||||
WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A
|
||||
PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES
|
||||
UCC§2312-§2313) OR FOR ANY PURPOSE WHATSOEVER,
|
||||
FOR THE SOFTWARE AND RELATED MATERIALS, HOWEVER USED.
|
||||
|
||||
IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA BE
|
||||
LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT LIMITED TO,
|
||||
INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING
|
||||
ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS,
|
||||
REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE
|
||||
REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY.
|
||||
|
||||
RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF THE
|
||||
SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY
|
||||
CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE
|
||||
ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE
|
@@ -11,11 +11,18 @@ class CspiceConan(ConanFile):
|
||||
homepage = "https://naif.jpl.nasa.gov/naif/toolkit.html"
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
exports_sources = ["CMakeLists.txt", "patches/**"]
|
||||
exports = ["TSPA.txt"]
|
||||
generators = "cmake"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {"shared": [True, False], "fPIC": [True, False]}
|
||||
default_options = {"shared": False, "fPIC": True}
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
"utilities": [True, False]
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
"utilities": True
|
||||
}
|
||||
|
||||
_cmake = None
|
||||
|
||||
@@ -83,15 +90,27 @@ class CspiceConan(ConanFile):
|
||||
if self._cmake:
|
||||
return self._cmake
|
||||
self._cmake = CMake(self)
|
||||
self._cmake.definitions["BUILD_UTILITIES"] = self.options.utilities
|
||||
self._cmake.configure()
|
||||
return self._cmake
|
||||
|
||||
def package(self):
|
||||
self.copy("TSPA.txt", dst="licenses")
|
||||
tools.save(os.path.join(self.package_folder, "licenses", "LICENSE"), self._extract_license())
|
||||
cmake = self._configure_cmake()
|
||||
cmake.install()
|
||||
|
||||
def _extract_license(self):
|
||||
spiceusr_header = tools.load(os.path.join(self._source_subfolder, "include", "SpiceUsr.h"))
|
||||
begin = spiceusr_header.find("-Disclaimer")
|
||||
end = spiceusr_header.find("-Required_Reading", begin)
|
||||
return spiceusr_header[begin:end]
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.libs = tools.collect_libs(self)
|
||||
self.cpp_info.libs = ["cspice"]
|
||||
if self.settings.os == "Linux":
|
||||
self.cpp_info.system_libs.append("m")
|
||||
|
||||
if self.options.utilities:
|
||||
bin_path = os.path.join(self.package_folder, "bin")
|
||||
self.output.info("Appending PATH environment variable: {}".format(bin_path))
|
||||
self.env_info.PATH.append(bin_path)
|
||||
|
Reference in New Issue
Block a user