From a098921d34c023c25dae8911f9ec94356db1592f Mon Sep 17 00:00:00 2001
From: Antonin Descampe <antonin@gmail.com>
Date: Fri, 12 Aug 2011 14:59:28 +0000
Subject: [PATCH] added cmake support to openjpip

---
 CHANGES                                       |  3 ++
 CMake/FindFCGI.cmake                          | 20 +++++++++
 CMakeLists.txt                                |  5 ++-
 applications/CMakeLists.txt                   |  4 ++
 applications/jpip/CHANGES                     |  3 ++
 applications/jpip/CMakeLists.txt              |  5 +++
 applications/jpip/libopenjpip/CMakeLists.txt  | 44 +++++++++++++++++++
 applications/jpip/opj_client/CMakeLists.txt   |  1 +
 .../opj_client/opj_dec_server/CMakeLists.txt  | 27 ++++++++++++
 applications/jpip/opj_server/CMakeLists.txt   | 29 ++++++++++++
 applications/jpip/tools/CMakeLists.txt        | 39 ++++++++++++++++
 .../jpip/tools/indexer/CMakeLists.txt         | 26 +++++++++++
 thirdparty/CMakeLists.txt                     | 17 +++++++
 13 files changed, 221 insertions(+), 2 deletions(-)
 create mode 100644 CMake/FindFCGI.cmake
 create mode 100644 applications/jpip/CMakeLists.txt
 create mode 100644 applications/jpip/libopenjpip/CMakeLists.txt
 create mode 100644 applications/jpip/opj_client/CMakeLists.txt
 create mode 100644 applications/jpip/opj_client/opj_dec_server/CMakeLists.txt
 create mode 100644 applications/jpip/opj_server/CMakeLists.txt
 create mode 100644 applications/jpip/tools/CMakeLists.txt
 create mode 100644 applications/jpip/tools/indexer/CMakeLists.txt

diff --git a/CHANGES b/CHANGES
index 0ab2350e..41a06bf3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+August 12, 2011
++ [antonin] added cmake support to openjpip
+
 August 11, 2011
 * [mickael] Fixed issue #76
 * [antonin] minor bug fix in configure.ac (credit to Vincent Torri)
diff --git a/CMake/FindFCGI.cmake b/CMake/FindFCGI.cmake
new file mode 100644
index 00000000..ff762775
--- /dev/null
+++ b/CMake/FindFCGI.cmake
@@ -0,0 +1,20 @@
+# Look for the header file.
+FIND_PATH(FCGI_INCLUDE_DIR NAMES fastcgi.h)
+
+# Look for the library.
+FIND_LIBRARY(FCGI_LIBRARY NAMES fcgi)
+
+# Handle the QUIETLY and REQUIRED arguments and set FCGI_FOUND to TRUE if all listed variables are TRUE.
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FCGI DEFAULT_MSG FCGI_LIBRARY FCGI_INCLUDE_DIR)
+
+# Copy the results to the output variables.
+IF(FCGI_FOUND)
+	SET( ${FCGI_LIBRARY})
+	SET(FCGI_INCLUDE_DIRS ${FCGI_INCLUDE_DIR})
+ELSE(FCGI_FOUND)
+	SET(FCGI_LIBRARIES)
+	SET(FCGI_INCLUDE_DIRS)
+ENDIF(FCGI_FOUND)
+
+MARK_AS_ADVANCED(FCGI_INCLUDE_DIRS FCGI_LIBRARIES)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index de047b78..9dab7393 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -212,12 +212,13 @@ ADD_SUBDIRECTORY(libopenjpeg)
 # Build Applications
 OPTION(BUILD_CODEC "Build the CODEC executables" ON)
 OPTION(BUILD_MJ2 "Build the MJ2 executables." OFF)
+OPTION(BUILD_JPIP "Build the JPIP library and executables." OFF)
 
-IF(BUILD_CODEC OR BUILD_MJ2)
+IF(BUILD_CODEC OR BUILD_MJ2 OR BUILD_JPIP)
   OPTION(BUILD_THIRDPARTY "Build the thirdparty executables if it is needed" OFF)
   ADD_SUBDIRECTORY(thirdparty)
   ADD_SUBDIRECTORY(applications)
-ENDIF (BUILD_CODEC OR BUILD_MJ2)
+ENDIF (BUILD_CODEC OR BUILD_MJ2 OR BUILD_JPIP)
 
 #-----------------------------------------------------------------------------
 # opj_config.h generation (2/2)
diff --git a/applications/CMakeLists.txt b/applications/CMakeLists.txt
index 3b65ade1..d26e26db 100644
--- a/applications/CMakeLists.txt
+++ b/applications/CMakeLists.txt
@@ -7,3 +7,7 @@ ENDIF(BUILD_CODEC)
 IF(BUILD_MJ2)
  ADD_SUBDIRECTORY(mj2)
 ENDIF(BUILD_MJ2)
+
+IF(BUILD_JPIP)
+ ADD_SUBDIRECTORY(jpip)
+ENDIF(BUILD_JPIP)
diff --git a/applications/jpip/CHANGES b/applications/jpip/CHANGES
index acf4d57f..755c205d 100644
--- a/applications/jpip/CHANGES
+++ b/applications/jpip/CHANGES
@@ -5,6 +5,9 @@ What's New for OpenJPIP
 ! : changed
 + : added
 
+August 12, 2011
++ [antonin] added cmake support to openjpip
+
 July 6, 2011
 * [antonin] JPIP : fixed autotools to work with recent name changes
 
diff --git a/applications/jpip/CMakeLists.txt b/applications/jpip/CMakeLists.txt
new file mode 100644
index 00000000..b6f6e2a5
--- /dev/null
+++ b/applications/jpip/CMakeLists.txt
@@ -0,0 +1,5 @@
+
+ADD_SUBDIRECTORY(libopenjpip)
+ADD_SUBDIRECTORY(opj_server)
+ADD_SUBDIRECTORY(opj_client)
+ADD_SUBDIRECTORY(tools)
\ No newline at end of file
diff --git a/applications/jpip/libopenjpip/CMakeLists.txt b/applications/jpip/libopenjpip/CMakeLists.txt
new file mode 100644
index 00000000..3f42af7c
--- /dev/null
+++ b/applications/jpip/libopenjpip/CMakeLists.txt
@@ -0,0 +1,44 @@
+INCLUDE_REGULAR_EXPRESSION("^.*$")
+
+INCLUDE_DIRECTORIES(
+  ${FCGI_INCLUDE_DIRNAME}
+)
+
+# Defines the source code for the library
+SET(OPENJPIP_SRCS
+${CMAKE_CURRENT_SOURCE_DIR}/boxheader_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/codestream_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/imgreg_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/marker_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/msgqueue_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/box_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/faixbox_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/index_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/metadata_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/placeholder_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/byte_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/ihdrbox_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/manfbox_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/mhixbox_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/target_manager.c
+)
+
+# Build the library
+ADD_LIBRARY(openjpip_local ${OPENJPIP_SRCS})
+
+ADD_LIBRARY(openjpip_server ${OPENJPIP_SRCS})
+TARGET_LINK_LIBRARIES(openjpip_server ${FCGI_LIBNAME})
+SET_TARGET_PROPERTIES(openjpip_server
+  PROPERTIES COMPILE_FLAGS "-DSERVER")
+
+
+# Install library
+INSTALL(TARGETS openjpip_local
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+)
+
+INSTALL(TARGETS openjpip_server
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+)
diff --git a/applications/jpip/opj_client/CMakeLists.txt b/applications/jpip/opj_client/CMakeLists.txt
new file mode 100644
index 00000000..8cf71ace
--- /dev/null
+++ b/applications/jpip/opj_client/CMakeLists.txt
@@ -0,0 +1 @@
+ADD_SUBDIRECTORY(opj_dec_server)
\ No newline at end of file
diff --git a/applications/jpip/opj_client/opj_dec_server/CMakeLists.txt b/applications/jpip/opj_client/opj_dec_server/CMakeLists.txt
new file mode 100644
index 00000000..437d706f
--- /dev/null
+++ b/applications/jpip/opj_client/opj_dec_server/CMakeLists.txt
@@ -0,0 +1,27 @@
+
+SET(OPJ_DEC_SERVER_SRCS
+${CMAKE_CURRENT_SOURCE_DIR}/cache_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/opj_dec_server.c
+${CMAKE_CURRENT_SOURCE_DIR}/jp2k_decoder.c
+${CMAKE_CURRENT_SOURCE_DIR}/imgsock_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/jpipstream_manager.c
+)
+
+INCLUDE_DIRECTORIES(
+  ../../libopenjpip
+)
+
+# Build executable
+
+ADD_EXECUTABLE(opj_dec_server ${OPJ_DEC_SERVER_SRCS})
+TARGET_LINK_LIBRARIES(opj_dec_server openjpip_local ${OPENJPEG_LIBRARY_NAME})
+
+# On unix you need to link to the math library:
+IF(UNIX)
+  TARGET_LINK_LIBRARIES(opj_dec_server m)
+ENDIF(UNIX)
+# Install exe
+INSTALL(TARGETS opj_dec_server
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+)
diff --git a/applications/jpip/opj_server/CMakeLists.txt b/applications/jpip/opj_server/CMakeLists.txt
new file mode 100644
index 00000000..c7bcedc5
--- /dev/null
+++ b/applications/jpip/opj_server/CMakeLists.txt
@@ -0,0 +1,29 @@
+
+# Headers file are located here:
+INCLUDE_DIRECTORIES(
+  ${FCGI_INCLUDE_DIRNAME}
+  ../libopenjpip
+)
+
+SET(OPJ_SERVER_SRCS
+${CMAKE_CURRENT_SOURCE_DIR}/channel_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/opj_server.c
+${CMAKE_CURRENT_SOURCE_DIR}/query_parser.c
+${CMAKE_CURRENT_SOURCE_DIR}/session_manager.c
+)
+
+# Build executable
+
+ADD_DEFINITIONS(-DSERVER)
+ADD_EXECUTABLE(opj_server ${OPJ_SERVER_SRCS})
+TARGET_LINK_LIBRARIES(opj_server openjpip_server ${FCGI_LIBNAME})
+
+# On unix you need to link to the math library:
+IF(UNIX)
+  TARGET_LINK_LIBRARIES(opj_server m)
+ENDIF(UNIX)
+# Install exe
+INSTALL(TARGETS opj_server
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+)
diff --git a/applications/jpip/tools/CMakeLists.txt b/applications/jpip/tools/CMakeLists.txt
new file mode 100644
index 00000000..04411622
--- /dev/null
+++ b/applications/jpip/tools/CMakeLists.txt
@@ -0,0 +1,39 @@
+
+ADD_SUBDIRECTORY(indexer)
+
+INCLUDE_DIRECTORIES(
+  ../libopenjpip
+)
+
+ADD_EXECUTABLE(jpip_to_j2k jpip_to_j2k.c)
+TARGET_LINK_LIBRARIES(jpip_to_j2k openjpip_local)
+IF(UNIX)
+  TARGET_LINK_LIBRARIES(jpip_to_j2k m)
+ENDIF(UNIX)
+# Install exe
+INSTALL(TARGETS jpip_to_j2k
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+)
+
+ADD_EXECUTABLE(jpip_to_jp2 jpip_to_jp2.c)
+TARGET_LINK_LIBRARIES(jpip_to_jp2 openjpip_local)
+IF(UNIX)
+  TARGET_LINK_LIBRARIES(jpip_to_jp2 m)
+ENDIF(UNIX)
+# Install exe
+INSTALL(TARGETS jpip_to_jp2
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+)
+
+ADD_EXECUTABLE(test_index test_index.c)
+TARGET_LINK_LIBRARIES(test_index openjpip_local)
+IF(UNIX)
+  TARGET_LINK_LIBRARIES(test_index m)
+ENDIF(UNIX)
+# Install exe
+INSTALL(TARGETS test_index
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+)
\ No newline at end of file
diff --git a/applications/jpip/tools/indexer/CMakeLists.txt b/applications/jpip/tools/indexer/CMakeLists.txt
new file mode 100644
index 00000000..43422e50
--- /dev/null
+++ b/applications/jpip/tools/indexer/CMakeLists.txt
@@ -0,0 +1,26 @@
+SET(INDEXER_SRCS
+${CMAKE_CURRENT_SOURCE_DIR}/bio.c
+${CMAKE_CURRENT_SOURCE_DIR}/cio.c
+${CMAKE_CURRENT_SOURCE_DIR}/index_create.c
+${CMAKE_CURRENT_SOURCE_DIR}/int.c
+${CMAKE_CURRENT_SOURCE_DIR}/jp2.c
+${CMAKE_CURRENT_SOURCE_DIR}/jpip.c
+${CMAKE_CURRENT_SOURCE_DIR}/pi.c
+${CMAKE_CURRENT_SOURCE_DIR}/t2.c
+${CMAKE_CURRENT_SOURCE_DIR}/tcd.c
+${CMAKE_CURRENT_SOURCE_DIR}/tgt.c
+)
+
+# Build executable
+
+ADD_EXECUTABLE(index_create ${INDEXER_SRCS})
+
+# On unix you need to link to the math library:
+IF(UNIX)
+  TARGET_LINK_LIBRARIES(index_create m)
+ENDIF(UNIX)
+# Install exe
+INSTALL(TARGETS index_create
+  EXPORT OpenJPEGTargets
+  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+)
\ No newline at end of file
diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt
index 00415933..a3f95095 100644
--- a/thirdparty/CMakeLists.txt
+++ b/thirdparty/CMakeLists.txt
@@ -143,4 +143,21 @@ ELSE (LCMS2_FOUND) # not found lcms2
   ENDIF (LCMS_FOUND)
 ENDIF(LCMS2_FOUND)
 
+#------------
+# Try to find lib FCGI
+FIND_PACKAGE(FCGI)
+
+IF(FCGI_FOUND)
+
+  SET(FCGI_LIBNAME ${FCGI_LIBRARIES} PARENT_SCOPE)
+  SET(FCGI_INCLUDE_DIRNAME ${FCGI_INCLUDE_DIRS} PARENT_SCOPE) 
+  message("Your system seems to have a FCGI lib available, we will use it to build JPIP")
+
+ELSE (FCGI_FOUND) # not found
+  
+  message("FCGI lib not found, JPIP will not be built as it requires FCGI")
+    
+ENDIF(FCGI_FOUND)
+
+
 
-- 
2.40.0