changed cmake behaviour: executables are now always statically linked. When -DBUIL_SH...
authorAntonin Descampe <antonin@gmail.com>
Sun, 28 Nov 2010 17:07:04 +0000 (17:07 +0000)
committerAntonin Descampe <antonin@gmail.com>
Sun, 28 Nov 2010 17:07:04 +0000 (17:07 +0000)
CHANGES
CMakeLists.txt
INSTALL
codec/CMakeLists.txt
jp3d/codec/CMakeLists.txt
jp3d/libjp3dvm/CMakeLists.txt
jpwl/CMakeLists.txt
libopenjpeg/CMakeLists.txt
mj2/CMakeLists.txt

diff --git a/CHANGES b/CHANGES
index b47b7c8fea719f8d0050b49334f65204081bb047..8d4589a4af1e495d62d053d1ea34744f68919ab3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+November 28, 2010
+! [antonin] changed cmake behaviour: executables are now always statically linked. When -DBUIL_SHARED_LIBS option is ON (the default), the shared versions of the libraries are also built (but not linked against executables).
+
 November 25, 2010
 * [antonin] fix compilation and DLL creation of libopenjpeg with MSYS/MinGW (from vincent.torri, see issue 47 on googlecode)
 
index 9c6cc2e557bf2ca16224257bc537b55ebb959777..cbabdb6fbed82b03b4d08f1e87a314eb86dc9470 100644 (file)
@@ -126,7 +126,7 @@ CONFIGURE_FILE(
 
 #-----------------------------------------------------------------------------
 # OpenJPEG build configuration options.
-OPTION(BUILD_SHARED_LIBS "Build OpenJPEG with shared libraries." ON)
+OPTION(BUILD_SHARED_LIBS "Build OpenJPEG shared libraries." ON)
 
 #-----------------------------------------------------------------------------
 SET (EXECUTABLE_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.")
diff --git a/INSTALL b/INSTALL
index 9058d4e27cca51befa83b4789d2b9c34d97a5100..444e6a3379f25d317b9f197d6636b6a0b6aba117 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -51,10 +51,12 @@ else:
   make clean
 
 Binaries are located in the 'bin' directory.
+Executables are always statically linked.
 
 Main available cmake flags:
 * To specify the install path: '-DCMAKE_INSTALL_PREFIX=/path'
 * To build the shared libraries: '-DBUILD_SHARED_LIBS:bool=on' (default: 'ON')
+  Note: when using this option, shared libraries are built but executables remain linked against the corresponding static libraries.
 * To build the CODEC executables: '-DBUILD_CODEC:bool=on' (default: 'ON')
 * To build the MJ2 executables: '-DBUILD_MJ2:bool=on' (default: 'OFF')
 * To build the JPWL executables and JPWL library: '-DBUILD_JPWL:bool=on' (default: 'OFF')
index 4a9d63df4fd4902c423eb9832a843f792dcaf579..cb2afeade5a62f8649b61bf88eda6c3cbc5a4260 100644 (file)
@@ -16,9 +16,7 @@ ENDIF(DONT_HAVE_GETOPT)
 
 # Do the proper thing when building static...if only there was configured
 # headers or def files instead
-IF(NOT BUILD_SHARED_LIBS)
-  ADD_DEFINITIONS(-DOPJ_STATIC)
-ENDIF(NOT BUILD_SHARED_LIBS)
+ADD_DEFINITIONS(-DOPJ_STATIC)
 
 # Headers file are located here:
 INCLUDE_DIRECTORIES(
@@ -35,7 +33,7 @@ ENDIF(TIFF_FOUND)
 # Loop over all executables:
 FOREACH(exe j2k_to_image image_to_j2k j2k_dump)
   ADD_EXECUTABLE(${exe} ${exe}.c ${common_SRCS})
-  TARGET_LINK_LIBRARIES(${exe} ${OPJ_PREFIX}openjpeg ${LCMS_LIB})
+  TARGET_LINK_LIBRARIES(${exe} ${OPENJPEG_LIBRARY_NAME}.static ${LCMS_LIB})
   IF(PNG_FOUND)
     TARGET_LINK_LIBRARIES(${exe} ${PNG_LIBRARIES})
   ENDIF(PNG_FOUND)
index 24595c7a9ceb3b3512d300af0a6c424d30980e00..bf08bc00ab278687fc652117ecc5abbf9f8f0190 100644 (file)
@@ -27,16 +27,14 @@ ENDIF(DONT_HAVE_GETOPT)
 
 # Do the proper thing when building static...if only there was configured
 # headers or def files instead
-IF(NOT BUILD_SHARED_LIBS)
-  ADD_DEFINITIONS(-DOPJ_STATIC)
-ENDIF(NOT BUILD_SHARED_LIBS)
+ADD_DEFINITIONS(-DOPJ_STATIC)
 
 #FIND_PACKAGE(TIFF REQUIRED)
 
 # Loop over all executables:
 FOREACH(exe jp3d_to_volume volume_to_jp3d)
   ADD_EXECUTABLE(${exe} ${exe}.c ${common_SRCS})
-  TARGET_LINK_LIBRARIES(${exe} ${OPJ_PREFIX}openjp3dvm) # ${TIFF_LIBRARIES})
+  TARGET_LINK_LIBRARIES(${exe} ${OPENJPEG_LIBRARY_NAME}_JP3D.static) # ${TIFF_LIBRARIES})
   # On unix you need to link to the math library:
   IF(UNIX)
     TARGET_LINK_LIBRARIES(${exe} m)
index 4c0fae41570d9a2ead55448280f0adb79ad0c7fe..4e9d241f09255dfd1fd1b0e5d85a860238406ed8 100644 (file)
@@ -10,25 +10,54 @@ SET(JP3DVM_SRCS
 bio.c  cio.c  dwt.c  event.c  jp3d.c  jp3d_lib.c  mct.c  mqc.c  openjpeg.c  pi.c  raw.c  t1.c  t1_3d.c  t2.c  tcd.c  tgt.c  volume.c
 )
 
-# Pass proper definition to preprocessor to generate shared lib
+IF(LCMS_INCLUDE_DIR)
+  INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
+ENDIF(LCMS_INCLUDE_DIR)
+
+# Build the static library
 IF(WIN32)
-  IF(BUILD_SHARED_LIBS)
-    ADD_DEFINITIONS(-DOPJ_EXPORTS)
-  ELSE(BUILD_SHARED_LIBS)
-    ADD_DEFINITIONS(-DOPJ_STATIC)
-  ENDIF(BUILD_SHARED_LIBS)
+  ADD_DEFINITIONS(-DOPJ_STATIC)
 ENDIF(WIN32)
-
-# Create the library
-#ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS})
-ADD_LIBRARY(${OPJ_PREFIX}openjp3dvm ${JP3DVM_SRCS})
-SET_TARGET_PROPERTIES(${OPJ_PREFIX}openjp3dvm
+ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JP3D.static STATIC ${JP3DVM_SRCS})
+SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JP3D.static PROPERTIES OUTPUT_NAME ${OPENJPEG_LIBRARY_NAME}_JP3D)
+SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JP3D.static
   PROPERTIES
     VERSION   1.3.0
     SOVERSION 1)
+IF(LCMS_LIB)
+TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME}_JP3D.static ${LCMS_LIB})
+ENDIF(LCMS_LIB)
 
 # Install library
-INSTALL_TARGETS(/lib/ ${OPJ_PREFIX}openjp3dvm)
+INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JP3D.static
+DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+)
+
+# If BUILD_SHARED_LIBS is ON, also build the shared library
+IF(BUILD_SHARED_LIBS)
+  # replace flag for static build with flag for shared build
+  IF(WIN32)
+    REMOVE_DEFINITIONS(-DOPJ_STATIC)
+    ADD_DEFINITIONS(-DOPJ_EXPORTS)
+  ENDIF(WIN32)
+  # Create the shared library
+  ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JP3D.shared SHARED ${JP3DVM_SRCS})
+  SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JP3D.shared PROPERTIES OUTPUT_NAME ${OPENJPEG_LIBRARY_NAME}_JP3D)
+  SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JP3D.shared
+    PROPERTIES
+      VERSION   1.3.0
+      SOVERSION 1)
+  IF(LCMS_LIB)
+    TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME}_JP3D.shared ${LCMS_LIB})
+  ENDIF(LCMS_LIB)
+  # Install library
+  INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JP3D.shared
+  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+  )
+  IF(WIN32)
+    REMOVE_DEFINITIONS(-DOPJ_EXPORTS)
+  ENDIF(WIN32)
+ENDIF(BUILD_SHARED_LIBS)
 
 # Install includes files
 INSTALL(FILES openjpeg.h
index ee4856d094a2fbdaef12206352d2b9d3d24795b3..9788b71795d38bfa9c4035133baa7bb45a412f54 100755 (executable)
@@ -33,19 +33,51 @@ IF(DONT_HAVE_GETOPT)
   )
 ENDIF(DONT_HAVE_GETOPT)
 
-ADD_LIBRARY(openjpeg_JPWL ${JPWL_SRCS} ${OPJ_SRCS})
-SET_TARGET_PROPERTIES(openjpeg_JPWL PROPERTIES
-  ${OPENJPEG_LIBRARY_PROPERTIES})
+IF(LCMS_INCLUDE_DIR)
+  INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
+ENDIF(LCMS_INCLUDE_DIR)
 
-INSTALL(TARGETS openjpeg_JPWL
+# Build the static library
+IF(WIN32)
+  ADD_DEFINITIONS(-DOPJ_STATIC)
+ENDIF(WIN32)
+ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JPWL.static STATIC ${JPWL_SRCS} ${OPJ_SRCS})
+SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JPWL.static PROPERTIES OUTPUT_NAME ${OPENJPEG_LIBRARY_NAME}_JPWL)
+SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JPWL.static PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
+IF(LCMS_LIB)
+  TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME}_JPWL.static ${LCMS_LIB})
+ENDIF(LCMS_LIB)
+# Install library
+INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JPWL.static
   DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
 )
 
+# If BUILD_SHARED_LIBS is ON, also build the shared library
+IF(BUILD_SHARED_LIBS)
+  # replace flag for static build with flag for shared build
+  IF(WIN32)
+    REMOVE_DEFINITIONS(-DOPJ_STATIC)
+    ADD_DEFINITIONS(-DOPJ_EXPORTS)
+  ENDIF(WIN32)
+  # Create the shared library
+  ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}_JPWL.shared SHARED ${JPWL_SRCS} ${OPJ_SRCS})
+  SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JPWL.shared PROPERTIES OUTPUT_NAME ${OPENJPEG_LIBRARY_NAME}_JPWL)
+  SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}_JPWL.shared PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
+  IF(LCMS_LIB)
+    TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME}_JPWL.shared ${LCMS_LIB})
+  ENDIF(LCMS_LIB)
+  # Install library
+  INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}_JPWL.shared
+    DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+  )
+  IF(WIN32)
+    REMOVE_DEFINITIONS(-DOPJ_EXPORTS)
+  ENDIF(WIN32)
+ENDIF(BUILD_SHARED_LIBS)
+
 # Do the proper thing when building static...if only there was configured
 # headers or def files instead
-IF(NOT BUILD_SHARED_LIBS)
-  ADD_DEFINITIONS(-DOPJ_STATIC)
-ENDIF(NOT BUILD_SHARED_LIBS)
+ADD_DEFINITIONS(-DOPJ_STATIC)
 
 INCLUDE_DIRECTORIES(
   ${OPENJPEG_SOURCE_DIR}/libopenjpeg
@@ -64,7 +96,7 @@ ADD_EXECUTABLE(JPWL_j2k_to_image
 ../codec/index.c
 ../codec/j2k_to_image.c
 )
-TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${OPJ_PREFIX}openjpeg_JPWL ${LCMS_LIB})
+TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${OPENJPEG_LIBRARY_NAME}_JPWL.static ${LCMS_LIB})
 IF(PNG_FOUND)
   TARGET_LINK_LIBRARIES(JPWL_j2k_to_image ${PNG_LIBRARIES})
 ENDIF(PNG_FOUND)
@@ -81,7 +113,7 @@ ADD_EXECUTABLE(JPWL_image_to_j2k
 ../codec/index.c
 ../codec/image_to_j2k.c
 )
-TARGET_LINK_LIBRARIES(JPWL_image_to_j2k ${OPJ_PREFIX}openjpeg_JPWL ${LCMS_LIB})
+TARGET_LINK_LIBRARIES(JPWL_image_to_j2k ${OPENJPEG_LIBRARY_NAME}_JPWL.static ${LCMS_LIB})
 IF(PNG_FOUND)
   TARGET_LINK_LIBRARIES(JPWL_image_to_j2k ${PNG_LIBRARIES})
 ENDIF(PNG_FOUND)
index 96192b7b9956e27669f68f41ea2dbbc5ef61248b..eb891d89c17429e5d8887976a474e4a51c2432c5 100644 (file)
@@ -21,31 +21,51 @@ SET(OPENJPEG_SRCS
   tgt.c
   opj_convert.c
 )
+
 IF(LCMS_INCLUDE_DIR)
   INCLUDE_DIRECTORIES( ${LCMS_INCLUDE_DIR} )
 ENDIF(LCMS_INCLUDE_DIR)
-# Pass proper definition to preprocessor to generate shared lib
+
+# Build the static library
 IF(WIN32)
-  IF(BUILD_SHARED_LIBS)
-    ADD_DEFINITIONS(-DOPJ_EXPORTS)
-  ELSE(BUILD_SHARED_LIBS)
-    ADD_DEFINITIONS(-DOPJ_STATIC)
-  ENDIF(BUILD_SHARED_LIBS)
+  ADD_DEFINITIONS(-DOPJ_STATIC)
 ENDIF(WIN32)
-
-# Create the library
-ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS})
-SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME} PROPERTIES
-       ${OPENJPEG_LIBRARY_PROPERTIES})
+ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}.static STATIC ${OPENJPEG_SRCS})
+SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}.static PROPERTIES OUTPUT_NAME ${OPENJPEG_LIBRARY_NAME})
+SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}.static PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
 IF(LCMS_LIB)
-  TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME} ${LCMS_LIB})
+  TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME}.static ${LCMS_LIB})
 ENDIF(LCMS_LIB)
 # Install library
-INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}
+INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}.static
   EXPORT OpenJPEGTargets
-       DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
 )
 
+# If BUILD_SHARED_LIBS is ON, also build the shared library
+IF(BUILD_SHARED_LIBS)
+  # replace flag for static build with flag for shared build
+  IF(WIN32)
+    REMOVE_DEFINITIONS(-DOPJ_STATIC)
+    ADD_DEFINITIONS(-DOPJ_EXPORTS)
+  ENDIF(WIN32)
+  # Create the shared library
+  ADD_LIBRARY(${OPENJPEG_LIBRARY_NAME}.shared SHARED ${OPENJPEG_SRCS})
+  SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}.shared PROPERTIES OUTPUT_NAME ${OPENJPEG_LIBRARY_NAME})
+  SET_TARGET_PROPERTIES(${OPENJPEG_LIBRARY_NAME}.shared PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
+  IF(LCMS_LIB)
+    TARGET_LINK_LIBRARIES(${OPENJPEG_LIBRARY_NAME}.shared ${LCMS_LIB})
+  ENDIF(LCMS_LIB)
+  # Install library
+  INSTALL(TARGETS ${OPENJPEG_LIBRARY_NAME}.shared
+    EXPORT OpenJPEGTargets
+    DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+  )
+  IF(WIN32)
+    REMOVE_DEFINITIONS(-DOPJ_EXPORTS)
+  ENDIF(WIN32)
+ENDIF(BUILD_SHARED_LIBS)
+
 # Install includes files
 INSTALL(FILES openjpeg.h
   DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR}/${subdir} COMPONENT Headers
index d8ca819b37ae6b45071b9d2833b5c2972b6ebd98..f678ee8367b902216658a051bdda4a8dd470797a 100644 (file)
@@ -9,9 +9,7 @@ INCLUDE_DIRECTORIES(
 
 # Do the proper thing when building static...if only there was configured
 # headers or def files instead
-IF(NOT BUILD_SHARED_LIBS)
-  ADD_DEFINITIONS(-DOPJ_STATIC)
-ENDIF(NOT BUILD_SHARED_LIBS)
+ADD_DEFINITIONS(-DOPJ_STATIC)
 
 ADD_EXECUTABLE(frames_to_mj2
   frames_to_mj2.c
@@ -19,7 +17,7 @@ ADD_EXECUTABLE(frames_to_mj2
   mj2_convert.c
   mj2.c
   )
-TARGET_LINK_LIBRARIES(frames_to_mj2 ${OPJ_PREFIX}openjpeg ${LCMS_LIB})
+TARGET_LINK_LIBRARIES(frames_to_mj2 ${OPENJPEG_LIBRARY_NAME}.static ${LCMS_LIB})
 IF(UNIX)
   TARGET_LINK_LIBRARIES(frames_to_mj2 m)
 ENDIF(UNIX)
@@ -30,7 +28,7 @@ ADD_EXECUTABLE(mj2_to_frames
     mj2_convert.c
     mj2.c
     )
-TARGET_LINK_LIBRARIES(mj2_to_frames ${OPJ_PREFIX}openjpeg ${LCMS_LIB})
+TARGET_LINK_LIBRARIES(mj2_to_frames ${OPENJPEG_LIBRARY_NAME}.static ${LCMS_LIB})
 IF(UNIX)
   TARGET_LINK_LIBRARIES(mj2_to_frames m)
 ENDIF(UNIX)
@@ -38,7 +36,7 @@ ENDIF(UNIX)
 ADD_EXECUTABLE(extract_j2k_from_mj2
     extract_j2k_from_mj2.c
     mj2.c )
-TARGET_LINK_LIBRARIES(extract_j2k_from_mj2 ${OPJ_PREFIX}openjpeg ${LCMS_LIB})
+TARGET_LINK_LIBRARIES(extract_j2k_from_mj2 ${OPENJPEG_LIBRARY_NAME}.static ${LCMS_LIB})
 IF(UNIX)
   TARGET_LINK_LIBRARIES(extract_j2k_from_mj2 m)
 ENDIF(UNIX)
@@ -46,7 +44,7 @@ ENDIF(UNIX)
 ADD_EXECUTABLE(wrap_j2k_in_mj2
     wrap_j2k_in_mj2.c
     mj2.c )
-TARGET_LINK_LIBRARIES(wrap_j2k_in_mj2 ${OPJ_PREFIX}openjpeg ${LCMS_LIB})
+TARGET_LINK_LIBRARIES(wrap_j2k_in_mj2 ${OPENJPEG_LIBRARY_NAME}.static ${LCMS_LIB})
 IF(UNIX)
   TARGET_LINK_LIBRARIES(wrap_j2k_in_mj2 m)
 ENDIF(UNIX)