Allow building only static or only shared libraries on Windows


git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.4.x@1553 632fc199-4ca6-4c93-a231-07263d6284db
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3ab7b19..3295dea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,6 +53,8 @@
 option(WITH_TURBOJPEG "Include the TurboJPEG wrapper library and associated test programs" TRUE)
 option(WITH_JAVA "Build Java wrapper for the TurboJPEG library" FALSE)
 option(WITH_12BIT "Encode/decode JPEG images with 12-bit samples (implies WITH_SIMD=0 WITH_TURBOJPEG=0 WITH_ARITH_ENC=0 WITH_ARITH_DEC=0)" FALSE)
+option(ENABLE_STATIC "Build static libraries" TRUE)
+option(ENABLE_SHARED "Build shared libraries" TRUE)
 
 if(WITH_12BIT)
   set(WITH_SIMD FALSE)
@@ -220,16 +222,21 @@
 
 if(WITH_JAVA)
   add_subdirectory(java)
+  set(ENABLE_SHARED TRUE)
 endif()
 
-add_subdirectory(sharedlib)
-
-add_library(jpeg-static STATIC ${JPEG_SOURCES} ${SIMD_OBJS})
-if(NOT MSVC)
-  set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
+if(ENABLE_SHARED)
+  add_subdirectory(sharedlib)
 endif()
-if(WITH_SIMD)
-  add_dependencies(jpeg-static simd)
+
+if(ENABLE_STATIC OR WITH_TURBOJPEG)
+  add_library(jpeg-static STATIC ${JPEG_SOURCES} ${SIMD_OBJS})
+  if(NOT MSVC)
+    set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
+  endif()
+  if(WITH_SIMD)
+    add_dependencies(jpeg-static simd)
+  endif()
 endif()
 
 if(WITH_TURBOJPEG)
@@ -239,40 +246,44 @@
     include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
   endif()
 
-  add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
-  set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE)
-  if(MINGW)
-    set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at)
-  endif()
-  target_link_libraries(turbojpeg jpeg-static)
-  set_target_properties(turbojpeg PROPERTIES LINK_INTERFACE_LIBRARIES "")
+  if(ENABLE_SHARED)
+    add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
+    set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE)
+    if(MINGW)
+      set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at)
+    endif()
+    target_link_libraries(turbojpeg jpeg-static)
+    set_target_properties(turbojpeg PROPERTIES LINK_INTERFACE_LIBRARIES "")
 
-  add_library(turbojpeg-static STATIC ${JPEG_SOURCES} ${SIMD_OBJS}
-    turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c)
-  if(NOT MSVC)
-    set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
-  endif()
-  if(WITH_SIMD)
-    add_dependencies(turbojpeg-static simd)
+    add_executable(tjunittest tjunittest.c tjutil.c)
+    target_link_libraries(tjunittest turbojpeg)
+
+    add_executable(tjbench tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c wrbmp.c
+      wrppm.c)
+    target_link_libraries(tjbench turbojpeg jpeg-static)
+    set_property(TARGET tjbench PROPERTY COMPILE_FLAGS
+      "-DBMP_SUPPORTED -DPPM_SUPPORTED")
   endif()
 
-  add_executable(tjunittest tjunittest.c tjutil.c)
-  target_link_libraries(tjunittest turbojpeg)
+  if(ENABLE_STATIC)
+    add_library(turbojpeg-static STATIC ${JPEG_SOURCES} ${SIMD_OBJS}
+      turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c)
+    if(NOT MSVC)
+      set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
+    endif()
+    if(WITH_SIMD)
+      add_dependencies(turbojpeg-static simd)
+    endif()
 
-  add_executable(tjunittest-static tjunittest.c tjutil.c)
-  target_link_libraries(tjunittest-static turbojpeg-static)
+    add_executable(tjunittest-static tjunittest.c tjutil.c)
+    target_link_libraries(tjunittest-static turbojpeg-static)
 
-  add_executable(tjbench tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c wrbmp.c
-    wrppm.c)
-  target_link_libraries(tjbench turbojpeg jpeg-static)
-  set_property(TARGET tjbench PROPERTY COMPILE_FLAGS
-    "-DBMP_SUPPORTED -DPPM_SUPPORTED")
-
-  add_executable(tjbench-static tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c wrbmp.c
-    wrppm.c)
-  target_link_libraries(tjbench-static turbojpeg-static jpeg-static)
-  set_property(TARGET tjbench-static PROPERTY COMPILE_FLAGS
-    "-DBMP_SUPPORTED -DPPM_SUPPORTED")
+    add_executable(tjbench-static tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c
+      wrbmp.c wrppm.c)
+    target_link_libraries(tjbench-static turbojpeg-static jpeg-static)
+    set_property(TARGET tjbench-static PROPERTY COMPILE_FLAGS
+      "-DBMP_SUPPORTED -DPPM_SUPPORTED")
+  endif()
 endif()
 
 if(WITH_12BIT)
@@ -283,19 +294,21 @@
 	set(DJPEG_BMP_SOURCES wrbmp.c wrtarga.c)
 endif()
 
-add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdswitch.c
-  ${CJPEG_BMP_SOURCES})
-set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
-target_link_libraries(cjpeg-static jpeg-static)
+if(ENABLE_STATIC)
+  add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdswitch.c
+    ${CJPEG_BMP_SOURCES})
+  set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
+  target_link_libraries(cjpeg-static jpeg-static)
 
-add_executable(djpeg-static djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrgif.c
-  wrppm.c ${DJPEG_BMP_SOURCES})
-set_property(TARGET djpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
-target_link_libraries(djpeg-static jpeg-static)
+  add_executable(djpeg-static djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrgif.c
+    wrppm.c ${DJPEG_BMP_SOURCES})
+  set_property(TARGET djpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
+  target_link_libraries(djpeg-static jpeg-static)
 
-add_executable(jpegtran-static jpegtran.c cdjpeg.c rdswitch.c transupp.c)
-target_link_libraries(jpegtran-static jpeg-static)
-set_property(TARGET jpegtran-static PROPERTY COMPILE_FLAGS "-DUSE_SETMODE")
+  add_executable(jpegtran-static jpegtran.c cdjpeg.c rdswitch.c transupp.c)
+  target_link_libraries(jpegtran-static jpeg-static)
+  set_property(TARGET jpegtran-static PROPERTY COMPILE_FLAGS "-DUSE_SETMODE")
+endif()
 
 add_executable(rdjpgcom rdjpgcom.c)
 
@@ -421,7 +434,15 @@
       TJUnitTest -bi -yuv -noyuvpad)
 endif()
 
-foreach(libtype shared static)
+set(TEST_LIBTYPES "")
+if(ENABLE_SHARED)
+  set(TEST_LIBTYPES ${TEST_LIBTYPES} shared)
+endif()
+if(ENABLE_STATIC)
+  set(TEST_LIBTYPES ${TEST_LIBTYPES} static)
+endif()
+
+foreach(libtype ${TEST_LIBTYPES})
   if(libtype STREQUAL "shared")
     set(dir sharedlib/)
   else()
@@ -794,13 +815,35 @@
   SOURCES libjpeg-turbo.nsi)
 
 if(WITH_TURBOJPEG)
-  set(TURBOJPEG_TARGETS turbojpeg turbojpeg-static tjbench)
+  if(ENABLE_SHARED)
+    install(TARGETS turbojpeg tjbench
+      ARCHIVE DESTINATION lib
+      LIBRARY DESTINATION lib
+      RUNTIME DESTINATION bin)
+  endif()
+  if(ENABLE_STATIC)
+    install(TARGETS turbojpeg-static ARCHIVE DESTINATION lib)
+    if(NOT ENABLE_SHARED)
+      install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/tjbench-static.exe
+        DESTINATION bin RENAME tjbench.exe)
+    endif()
+  endif()
+  install(FILES ${CMAKE_SOURCE_DIR}/turbojpeg.h DESTINATION include)
 endif()
-install(TARGETS jpeg-static rdjpgcom wrjpgcom ${TURBOJPEG_TARGETS}
-  ARCHIVE DESTINATION lib
-  LIBRARY DESTINATION lib
-  RUNTIME DESTINATION bin
-)
+
+if(ENABLE_STATIC)
+  install(TARGETS jpeg-static ARCHIVE DESTINATION lib)
+  if(NOT ENABLE_SHARED)
+    install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cjpeg-static.exe
+      DESTINATION bin RENAME cjpeg.exe)
+    install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/djpeg-static.exe
+      DESTINATION bin RENAME djpeg.exe)
+    install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jpegtran-static.exe
+      DESTINATION bin RENAME jpegtran.exe)
+  endif()
+endif()
+
+install(TARGETS rdjpgcom wrjpgcom RUNTIME DESTINATION bin)
 
 install(FILES ${CMAKE_SOURCE_DIR}/README ${CMAKE_SOURCE_DIR}/README-turbo.txt
   ${CMAKE_SOURCE_DIR}/example.c ${CMAKE_SOURCE_DIR}/libjpeg.txt
@@ -810,4 +853,4 @@
 
 install(FILES ${CMAKE_BINARY_DIR}/jconfig.h ${CMAKE_SOURCE_DIR}/jerror.h
   ${CMAKE_SOURCE_DIR}/jmorecfg.h ${CMAKE_SOURCE_DIR}/jpeglib.h
-  ${CMAKE_SOURCE_DIR}/turbojpeg.h DESTINATION include)
+  DESTINATION include)