Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve CMake code for the case Win + CMake + Visual Studio #22

Merged
merged 7 commits into from
Aug 11, 2017
22 changes: 5 additions & 17 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,6 @@
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.

##
# Running cmake in a tree in which we have run ./configure ; make
# creates include/exiv2/exv_conf.h which conflicts with cmake's own exv_conf.h
# This causes incorrect compilation and linking errors.
#
# It's OK to delete this as it will be recreated on demand by <exiv2-dir>/Makefile
if( EXISTS "${CMAKE_SOURCE_DIR}/include/exiv2/exv_conf.h" )
file(REMOVE "${CMAKE_SOURCE_DIR}/include/exiv2/exv_conf.h")
endif()
##

CMAKE_MINIMUM_REQUIRED( VERSION 3.1.0 )
PROJECT( exiv2 )

Expand Down Expand Up @@ -95,11 +84,6 @@ IF( EXIV2_ENABLE_COMMERCIAL )
SET (EXIV2_ENABLE_NLS OFF)
ENDIF()

set (PRIVATE_VAR)
if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.8)
set (PRIVATE_VAR PRIVATE)
endif()

# binary as first, since it workarounds old VS solution compatibility problems
INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/src/ ${CMAKE_SOURCE_DIR}/include/ ${CMAKE_SOURCE_DIR}/include/exiv2/)

Expand All @@ -118,6 +102,8 @@ IF( EXIV2_ENABLE_XMP )
ENDIF( EXIV2_ENABLE_XMP )

include( config/generateConfigFile.cmake )
include_directories(${CMAKE_BINARY_DIR}) # Make the exv_conf.h file visible for the full project

include( config/CMakeChecks.txt )

SET( INSTALL_TARGET_STANDARD_ARGS
Expand Down Expand Up @@ -147,7 +133,9 @@ SET( XMPSRC ${CMAKE_CURRENT_SOURCE_DIR}/xmpsdk/src/ExpatAdapter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/xmpsdk/src/XMPUtils.cpp
)

ADD_SUBDIRECTORY( xmpsdk )
if( EXIV2_ENABLE_LIBXMP )
ADD_SUBDIRECTORY( xmpsdk )
endif()
ADD_SUBDIRECTORY( src )

IF( EXIV2_ENABLE_BUILD_SAMPLES )
Expand Down
1 change: 0 additions & 1 deletion config/findDependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ endif( EXIV2_ENABLE_WEBREADY )

if (EXIV2_ENABLE_XMP)
find_package(EXPAT REQUIRED)
include_directories(${EXPAT_INCLUDE_DIR})
endif (EXIV2_ENABLE_XMP)

if( EXIV2_ENABLE_NLS )
Expand Down
3 changes: 1 addition & 2 deletions config/generateConfigFile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,4 @@ return 0;

#####################################################################################

configure_file( config/config.h.cmake ${CMAKE_SOURCE_DIR}/include/exiv2/exv_conf.h @ONLY)
#configure_file( config/config.h.cmake ${CMAKE_SOURCE_DIR}/include/exiv2/exv_conf.h)
configure_file( config/config.h.cmake ${CMAKE_BINARY_DIR}/exv_conf.h @ONLY)
20 changes: 11 additions & 9 deletions samples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ FOREACH(entry ${SAMPLES})
STRING( REPLACE ".cpp" "" target ${entry})
ADD_EXECUTABLE( ${target} ${target}.cpp )
ADD_TEST( ${target}_test ${target} )
TARGET_LINK_LIBRARIES( ${target} ${PRIVATE_VAR} exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES})
TARGET_LINK_LIBRARIES( ${target} PRIVATE exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES})
INSTALL( TARGETS ${target} ${INSTALL_TARGET_STANDARD_ARGS} )
ENDFOREACH(entry ${SAMPLES})

Expand All @@ -61,26 +61,28 @@ ENDIF( MSVC )

SET( MC_SRC ${MC_SRC} metacopy.cpp ../src/utils.cpp )
ADD_EXECUTABLE( metacopy ${MC_SRC} )
TARGET_LINK_LIBRARIES( metacopy ${PRIVATE_VAR} exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
TARGET_LINK_LIBRARIES( metacopy PRIVATE exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
INSTALL( TARGETS metacopy ${INSTALL_TARGET_STANDARD_ARGS} )

SET ( PATHTEST_SRC ${PATHTEST_SRC} path-test.cpp ../src/utils.cpp )
ADD_EXECUTABLE ( pathtest ${PATHTEST_SRC} )
SET_TARGET_PROPERTIES( pathtest PROPERTIES OUTPUT_NAME path-test )
TARGET_LINK_LIBRARIES( pathtest ${PRIVATE_VAR} exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
TARGET_LINK_LIBRARIES( pathtest PRIVATE exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
INSTALL ( TARGETS pathtest ${INSTALL_TARGET_STANDARD_ARGS} )

SET( EXIV2JSON_SRC exiv2json.cpp Jzon.cpp )
ADD_EXECUTABLE( exiv2json ${EXIV2JSON_SRC} )
SET_TARGET_PROPERTIES( exiv2json PROPERTIES OUTPUT_NAME exiv2json )
TARGET_LINK_LIBRARIES( exiv2json ${PRIVATE_VAR} ${PRIVATE_VAR} exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
TARGET_LINK_LIBRARIES( exiv2json PRIVATE exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
INSTALL( TARGETS exiv2json ${INSTALL_TARGET_STANDARD_ARGS} )

SET( GEOTAG_SRC geotag.cpp )
ADD_EXECUTABLE( geotag ${GEOTAG_SRC} )
SET_TARGET_PROPERTIES( geotag PROPERTIES OUTPUT_NAME geotag )
TARGET_LINK_LIBRARIES( geotag ${PRIVATE_VAR} exiv2lib ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
INSTALL( TARGETS geotag ${INSTALL_TARGET_STANDARD_ARGS} )
if( EXIV2_ENABLE_LIBXMP )
SET( GEOTAG_SRC geotag.cpp )
ADD_EXECUTABLE( geotag ${GEOTAG_SRC} )
SET_TARGET_PROPERTIES( geotag PROPERTIES OUTPUT_NAME geotag )
TARGET_LINK_LIBRARIES( geotag PRIVATE exiv2lib ${EXPAT_LIBRARIES} ${ZLIB_LIBRARIES})
INSTALL( TARGETS geotag ${INSTALL_TARGET_STANDARD_ARGS} )
endif()

# ******************************************************************************
# Man page
Expand Down
45 changes: 18 additions & 27 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -260,60 +260,51 @@ if ( MSVC )
if ( EXIV2_ENABLE_STATIC )
TARGET_LINK_LIBRARIES( exiv2lib zlibstatic ${ZLIB_LIBRARIES} )
else()
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${ZLIB_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${ZLIB_LIBRARIES} )
endif()
source_group("Header Files" FILES ${LIBEXIV2_HDR} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${ZLIB_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${EXPAT_LIBRARIES} )
source_group("Header Files" FILES ${LIBCURL_HDR} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${CURL_LIBRARIES} )
source_group("Header Files" FILES ${SSH_HDR} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${SSH_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${ZLIB_LIBRARIES} ${EXPAT_LIBRARIES}
${CURL_LIBRARIES} ${SSH_LIBRARIES})
else()
if ( UNIX AND NOT FREEBSD )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} dl ${EXPAT_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} dl ${CURL_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} dl ${SSH_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} dl ${CMAKE_THREAD_LIBS_INIT} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE dl ${EXPAT_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE dl ${CURL_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE dl ${SSH_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE dl ${CMAKE_THREAD_LIBS_INIT} )
else()
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${EXPAT_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${CURL_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${SSH_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${CMAKE_THREAD_LIBS_INIT} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${EXPAT_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${CURL_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${SSH_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${CMAKE_THREAD_LIBS_INIT} )
endif()
endif()

if( EXIV2_ENABLE_LIBXMP )
ADD_DEPENDENCIES( exiv2lib xmp )
if ( MSVC )
LINK_DIRECTORIES(${LIBRARY_OUTPUT_PATH}/$(ConfigurationName))
else()
ADD_DEPENDENCIES( exiv2lib xmp)
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${EXPAT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
endif(MSVC)
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} xmp )
TARGET_LINK_LIBRARIES( exiv2lib PUBLIC xmp )
ENDIF()

IF( EXIV2_ENABLE_PNG )
IF( ZLIB_FOUND )
IF( MSVC )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} optimized ${ZLIB_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE optimized ${ZLIB_LIBRARIES} )
ELSE()
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${ZLIB_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${ZLIB_LIBRARIES} )
ENDIF()
ENDIF()
ENDIF()

IF( EXIV2_ENABLE_NLS )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${LIBINTL_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${LIBINTL_LIBRARIES} )
ENDIF( EXIV2_ENABLE_NLS )

IF( ICONV_FOUND )
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${ICONV_LIBRARIES} )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${ICONV_LIBRARIES} )
ENDIF( ICONV_FOUND )

IF (CYGWIN OR MINGW)
TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} psapi ws2_32 )
TARGET_LINK_LIBRARIES( exiv2lib PRIVATE psapi ws2_32 )
ENDIF(CYGWIN OR MINGW)

INSTALL( TARGETS exiv2lib ${INSTALL_TARGET_STANDARD_ARGS} )
Expand All @@ -330,7 +321,7 @@ INSTALL( TARGETS exiv2 ${INSTALL_TARGET_STANDARD_ARGS} )
# ******************************************************************************
# connection test application
ADD_EXECUTABLE( conntest ${CONNTEST} )
TARGET_LINK_LIBRARIES( conntest ${PRIVATE_VAR} exiv2lib ${CURL_LIBRARIES} ${SSH_LIBRARIES} ${LIBINTL_LIBRARIES} )
TARGET_LINK_LIBRARIES( conntest PRIVATE exiv2lib ${CURL_LIBRARIES} ${SSH_LIBRARIES} ${LIBINTL_LIBRARIES} )

# ******************************************************************************
# exifprint application
Expand Down
9 changes: 3 additions & 6 deletions xmpsdk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,15 @@ IF( EXIV2_ENABLE_XMP AND EXIV2_ENABLE_LIBXMP )
check_include_file( "stdint.h" EXV_HAVE_STDINT_H )

ADD_LIBRARY( xmp STATIC ${XMPSRC} )
target_compile_definitions(xmp PUBLIC XML_STATIC)
target_include_directories(xmp PUBLIC ${EXPAT_INCLUDE_DIR})

target_include_directories(xmp PRIVATE ${CMAKE_SOURCE_DIR}/xmpsdk/include)
if (EXV_HAVE_STDINT_H)
target_compile_definitions(xmp PRIVATE EXV_HAVE_STDINT_H)
endif()

GET_TARGET_PROPERTY( XMPLIB xmp LOCATION )
if ( NOT MSVC )
TARGET_LINK_LIBRARIES(xmp ${EXPAT_LIBRARIES})
else()
TARGET_LINK_LIBRARIES(xmp ${CMAKE_THREAD_LIBS_INIT} ${EXPAT_LIBRARIES})
endif()
target_link_libraries(xmp PUBLIC ${EXPAT_LIBRARIES})
# 1119 Install libxmp.a for use by third party applications (Thanks, Emmanuel)
INSTALL(TARGETS xmp ${INSTALL_TARGET_STANDARD_ARGS} )
ENDIF()
Expand Down