aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2013-03-01 09:53:43 +0000
committerVincent Richard <[email protected]>2013-03-01 09:53:43 +0000
commit18846c36913334fe5805f6b8abfa20536a633322 (patch)
tree27feb7fef2d0f72e0b1fb5553a19111647a85370
parentFixed issue #26: strcpy_s not available on MinGW. (diff)
downloadvmime-18846c36913334fe5805f6b8abfa20536a633322.tar.gz
vmime-18846c36913334fe5805f6b8abfa20536a633322.zip
Selective build of shared/static library (issue #27).
-rw-r--r--CMakeLists.txt196
1 files changed, 123 insertions, 73 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1bd70115..d0b7578f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -89,56 +89,89 @@ IF(UNIX AND NOT APPLE AND NOT CMAKE_CROSSCOMPILING AND NOT EXISTS "/etc/debian_v
ENDIF()
# Shared library
-ADD_LIBRARY(
- ${VMIME_LIBRARY_NAME}
- SHARED
- ${VMIME_LIBRARY_SRC_FILES}
- ${VMIME_LIBRARY_INCLUDE_FILES}
+OPTION(
+ VMIME_BUILD_SHARED_LIBRARY
+ "Build shared library"
+ ON
)
-SET_TARGET_PROPERTIES(
- ${VMIME_LIBRARY_NAME}
- PROPERTIES
- VERSION "${VMIME_VERSION}"
- SOVERSION "${VMIME_API_VERSION}"
-)
+IF(VMIME_BUILD_SHARED_LIBRARY)
+
+ ADD_LIBRARY(
+ ${VMIME_LIBRARY_NAME}
+ SHARED
+ ${VMIME_LIBRARY_SRC_FILES}
+ ${VMIME_LIBRARY_INCLUDE_FILES}
+ )
+
+ SET_TARGET_PROPERTIES(
+ ${VMIME_LIBRARY_NAME}
+ PROPERTIES
+ VERSION "${VMIME_VERSION}"
+ SOVERSION "${VMIME_API_VERSION}"
+ )
+
+ENDIF()
# Static library
#
# Note: cannot have two targets with the same name so the static version has
# '-static' appended and then the name of the output file is set separately.
-ADD_LIBRARY(
- ${VMIME_LIBRARY_NAME}-static
- STATIC
- ${VMIME_LIBRARY_SRC_FILES}
- ${VMIME_LIBRARY_INCLUDE_FILES}
+OPTION(
+ VMIME_BUILD_STATIC_LIBRARY
+ "Build static library"
+ ON
)
-SET_TARGET_PROPERTIES(
- ${VMIME_LIBRARY_NAME}-static
- PROPERTIES
- OUTPUT_NAME ${VMIME_LIBRARY_NAME}
-)
+IF(VMIME_BUILD_STATIC_LIBRARY)
+
+ ADD_LIBRARY(
+ ${VMIME_LIBRARY_NAME}-static
+ STATIC
+ ${VMIME_LIBRARY_SRC_FILES}
+ ${VMIME_LIBRARY_INCLUDE_FILES}
+ )
+
+ SET_TARGET_PROPERTIES(
+ ${VMIME_LIBRARY_NAME}-static
+ PROPERTIES
+ OUTPUT_NAME ${VMIME_LIBRARY_NAME}
+ )
+
+ENDIF()
+
+# Ensure at least one type of library (either shared or static) is build
+IF(NOT(VMIME_BUILD_SHARED_LIBRARY OR VMIME_BUILD_STATIC_LIBRARY))
+ MESSAGE(FATAL_ERROR "You should select at least one library to build (either VMIME_BUILD_SHARED_LIBRARY or VMIME_BUILD_STATIC_LIBRARY must be set to YES.")
+ENDIF()
# These next two lines are required but it is unclear exactly what they do.
# The CMake FAQ mentions they are necessary and it does not work otherwise.
-SET_TARGET_PROPERTIES(${VMIME_LIBRARY_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
-SET_TARGET_PROPERTIES(${VMIME_LIBRARY_NAME}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+IF(VMIME_BUILD_SHARED_LIBRARY)
+ SET_TARGET_PROPERTIES(${VMIME_LIBRARY_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+ENDIF()
+IF(VMIME_BUILD_STATIC_LIBRARY)
+ SET_TARGET_PROPERTIES(${VMIME_LIBRARY_NAME}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+ENDIF()
SET(CMAKE_INSTALL_LIBDIR lib CACHE PATH "Output directory for libraries")
# Installation of libraries
-INSTALL(
- TARGETS ${VMIME_LIBRARY_NAME}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT sharedlibs
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT sharedlibs
-)
+IF(VMIME_BUILD_SHARED_LIBRARY)
+ INSTALL(
+ TARGETS ${VMIME_LIBRARY_NAME}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT sharedlibs
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT sharedlibs
+ )
+ENDIF()
-INSTALL(
- TARGETS ${VMIME_LIBRARY_NAME}-static
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT staticlibs
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT staticlibs
-)
+IF(VMIME_BUILD_STATIC_LIBRARY)
+ INSTALL(
+ TARGETS ${VMIME_LIBRARY_NAME}-static
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT staticlibs
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT staticlibs
+ )
+ENDIF()
# Installation of header files
INSTALL_HEADERS_WITH_DIRECTORY(VMIME_LIBRARY_INCLUDE_FILES headers)
@@ -440,11 +473,13 @@ IF(VMIME_HAVE_SASL_SUPPORT)
${GSASL_INCLUDE_DIR}
)
- TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- ${GSASL_LIBRARIES}
- )
+ IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ ${GSASL_LIBRARIES}
+ )
+ ENDIF()
SET(VMIME_PKGCONFIG_LIBS "${VMIME_PKGCONFIG_LIBS} ${GSASL_LIBRARIES}")
SET(VMIME_PKGCONFIG_CFLAGS "${VMIME_PKGCONFIG_CFLAGS} ${GSASL_INCLUDE_DIR}")
@@ -495,11 +530,13 @@ IF(VMIME_HAVE_TLS_SUPPORT)
${GNUTLS_LIBRARY_DIRS}
)
- TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- ${GNUTLS_LIBRARY}
- )
+ IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ ${GNUTLS_LIBRARY}
+ )
+ ENDIF()
SET(VMIME_PKGCONFIG_LIBS "${VMIME_PKGCONFIG_LIBS} ${GNUTLS_LIBRARY_DIRS} ${GNUTLS_LIBRARY}")
SET(VMIME_PKGCONFIG_CFLAGS "${VMIME_PKGCONFIG_CFLAGS} ${GNUTLS_INCLUDE_DIR}")
@@ -512,11 +549,13 @@ IF(VMIME_HAVE_TLS_SUPPORT)
${OPENSSL_INCLUDE_DIR}
)
- TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- ${OPENSSL_LIBRARIES}
- )
+ IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ ${OPENSSL_LIBRARIES}
+ )
+ ENDIF()
SET(VMIME_PKGCONFIG_LIBS "${VMIME_PKGCONFIG_LIBS} ${OPENSSL_LIBRARIES}")
SET(VMIME_PKGCONFIG_CFLAGS "${VMIME_PKGCONFIG_CFLAGS} ${OPENSSL_INCLUDE_DIR}")
@@ -541,11 +580,13 @@ INCLUDE_DIRECTORIES(
${ICONV_INCLUDE_DIR}
)
-TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- ${ICONV_LIBRARIES}
-)
+IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ ${ICONV_LIBRARIES}
+ )
+ENDIF()
##############################################################################
@@ -580,11 +621,13 @@ IF(WIN32)
CHECK_LIBRARY_EXISTS("ws2_32" getch "${CMAKE_LIBRARY_PATH}" VMIME_HAVE_LIBWS2_32)
IF(VMIME_HAVE_LIBWS2_32)
- TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- "ws2_32"
- )
+ IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ "ws2_32"
+ )
+ ENDIF()
ENDIF()
# MLang
@@ -595,11 +638,13 @@ IF(WIN32)
IF(VMIME_HAVE_MLANG_LIB)
SET(VMIME_HAVE_MLANG ON)
- TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- "mlang"
- )
+ IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ "mlang"
+ )
+ ENDIF()
ENDIF()
ENDIF()
@@ -618,21 +663,26 @@ CHECK_SYMBOL_EXISTS(SYS_gettid sys/syscall.h VMIME_HAVE_SYSCALL_GETTID)
FIND_PACKAGE(Threads)
-TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- ${CMAKE_THREAD_LIBS_INIT}
-)
+IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ ${CMAKE_THREAD_LIBS_INIT}
+ )
+ENDIF()
FIND_LIBRARY(PTHREAD_LIB pthread)
IF(PTHREAD_LIB)
SET(VMIME_HAVE_PTHREAD 1)
- TARGET_LINK_LIBRARIES(
- ${VMIME_LIBRARY_NAME}
- ${TARGET_LINK_LIBRARIES}
- ${PTHREAD_LIB}
- )
+
+ IF(VMIME_BUILD_SHARED_LIBRARY)
+ TARGET_LINK_LIBRARIES(
+ ${VMIME_LIBRARY_NAME}
+ ${TARGET_LINK_LIBRARIES}
+ ${PTHREAD_LIB}
+ )
+ ENDIF()
ELSE(PTHREAD_LIB)
SET(VMIME_HAVE_PTHREAD 0)
ENDIF(PTHREAD_LIB)