From 60306450b7a7354825660e69a30877760c48395a Mon Sep 17 00:00:00 2001 From: Sascha Cunz Date: Wed, 29 Jan 2014 23:47:20 +0000 Subject: [PATCH 1/3] Use relative path to set cmake module path This has actually no effect on a "normal" build, but allows to use libgit2 as a part of a larger project via CMake's ADD_SUBDIRECTORY() Closes #2087 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f1c81eb6f..611cd9eec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ PROJECT(libgit2 C) CMAKE_MINIMUM_REQUIRED(VERSION 2.6) # Add find modules to the path -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/") # Build options # From 39949f0604cb009d850ff080f630ccdf7ab11715 Mon Sep 17 00:00:00 2001 From: Sascha Cunz Date: Thu, 30 Jan 2014 02:28:53 +0000 Subject: [PATCH 2/3] Cleanup FindIconv.cmake Doesn't change anything. Just removes stuff that was probably missed to remove when this was imported. --- cmake/Modules/FindIconv.cmake | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/cmake/Modules/FindIconv.cmake b/cmake/Modules/FindIconv.cmake index fb6d1e210..487b2f557 100644 --- a/cmake/Modules/FindIconv.cmake +++ b/cmake/Modules/FindIconv.cmake @@ -4,13 +4,12 @@ # ICONV_FOUND - system has Iconv # ICONV_INCLUDE_DIR - the Iconv include directory # ICONV_LIBRARIES - Link these to use Iconv -# ICONV_SECOND_ARGUMENT_IS_CONST - the second argument for iconv() is const # -IF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) +IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) # Already in cache, be silent SET(ICONV_FIND_QUIETLY TRUE) -ENDIF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) +ENDIF() FIND_PATH(ICONV_INCLUDE_DIR iconv.h) @@ -18,25 +17,19 @@ FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c PATH) IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) SET(ICONV_FOUND TRUE) -ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) - -set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR}) -set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES}) -set(CMAKE_REQUIRED_INCLUDES) -set(CMAKE_REQUIRED_LIBRARIES) +ENDIF() IF(ICONV_FOUND) IF(NOT ICONV_FIND_QUIETLY) MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}") ENDIF(NOT ICONV_FIND_QUIETLY) -ELSE(ICONV_FOUND) +ELSE() IF(Iconv_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could not find Iconv") ENDIF(Iconv_FIND_REQUIRED) -ENDIF(ICONV_FOUND) +ENDIF() MARK_AS_ADVANCED( ICONV_INCLUDE_DIR ICONV_LIBRARIES - ICONV_SECOND_ARGUMENT_IS_CONST ) From 6e0ff093fb955adeeeed5c83a0fafc568d4b8074 Mon Sep 17 00:00:00 2001 From: Sascha Cunz Date: Thu, 30 Jan 2014 02:30:55 +0000 Subject: [PATCH 3/3] Find and use a MacPorts version of libiconv. Fixes #2017. - Add correct -I, -L and -l flags - Search for libiconv in /opt/local/[include|lib] before in the system path. See #2017 for details. - Give splitted -L and -l arguments to pkg-config --- CMakeLists.txt | 3 ++- cmake/Modules/FindIconv.cmake | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 611cd9eec..4483be338 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -202,8 +202,9 @@ IF (USE_ICONV) ENDIF() IF (ICONV_FOUND) ADD_DEFINITIONS(-DGIT_USE_ICONV) + INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR}) IF(ICONV_LIBRARIES MATCHES "libiconv") - SET(LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS} -liconv") + SET(LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS} ${ICONV_LIBRARIES}") ELSE() SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} iconv") ENDIF() diff --git a/cmake/Modules/FindIconv.cmake b/cmake/Modules/FindIconv.cmake index 487b2f557..f1406c557 100644 --- a/cmake/Modules/FindIconv.cmake +++ b/cmake/Modules/FindIconv.cmake @@ -11,15 +11,23 @@ IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) SET(ICONV_FIND_QUIETLY TRUE) ENDIF() +FIND_PATH(ICONV_INCLUDE_DIR iconv.h PATHS /opt/local/include NO_DEFAULT_PATH) FIND_PATH(ICONV_INCLUDE_DIR iconv.h) -FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c PATH) +FIND_LIBRARY(iconv_lib NAMES iconv libiconv libiconv-2 c NO_DEFAULT_PATH PATHS /opt/local/lib) +FIND_LIBRARY(iconv_lib NAMES iconv libiconv libiconv-2 c) -IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) +IF(ICONV_INCLUDE_DIR AND iconv_lib) SET(ICONV_FOUND TRUE) ENDIF() IF(ICONV_FOUND) + # split iconv into -L and -l linker options, so we can set them for pkg-config + GET_FILENAME_COMPONENT(iconv_path ${iconv_lib} PATH) + GET_FILENAME_COMPONENT(iconv_name ${iconv_lib} NAME_WE) + STRING(REGEX REPLACE "^lib" "" iconv_name ${iconv_name}) + SET(ICONV_LIBRARIES -L${iconv_path} -l${iconv_name}) + IF(NOT ICONV_FIND_QUIETLY) MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}") ENDIF(NOT ICONV_FIND_QUIETLY)