# Pkg: ApacheForCPanel
# Trg: mod_lsapi + sulsphp
# Default HTTPD_USER: apache

CMAKE_MINIMUM_REQUIRED(VERSION 2.4)

PROJECT(MOD_LSAPI)

IF(NOT DEFINED HTTPD_USER)
SET (HTTPD_USER "apache")
ENDIF(NOT DEFINED HTTPD_USER) 

SET (AP_HTTPD_USER "\\\"${HTTPD_USER}\\\"")

# This code eliminates error message of cmake...
if(COMMAND cmake_policy)
     cmake_policy(SET CMP0003 NEW)
#     cmake_policy(SET CMP0002 NEW)
endif(COMMAND cmake_policy)

SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

# ------ Define needed paths

SET(SRC "${CMAKE_SOURCE_DIR}/src")
SET(LIBUTILSRC "${SRC}/liblscapi-util")
SET(SUPPORTSRC "${SRC}/support")
SET(INCPATH "${SRC}/include")
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/build/bin")
SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/build/lib")


# ------ Let's find Apache

### For DirectAdmin build only #########################################################################################################

# Search for Apache and determine version and paths
FIND_PACKAGE(ApacheForCPanel REQUIRED)

IF (APACHE_2_4)

SET (FINAL_APACHE_DEFINE APACHE2_4)
MESSAGE (STATUS "****** DirectAdmin Apache 2.4 found")


ELSEIF (APACHE_2_2)

SET (FINAL_APACHE_DEFINE APACHE2_2)
MESSAGE (STATUS "****** DirectAdmin Apache 2.2 found")


ELSE (APACHE_2_4)
MESSAGE( FATAL_ERROR "Apache version should be 2.4 or 2.2")
ENDIF (APACHE_2_4)

MESSAGE (STATUS "****** DirectAdmin Apache HTTPD Include dir:   ${HTTPD_INCLUDE_DIR}")
MESSAGE (STATUS "****** DirectAdmin Apache APR Include dir:     ${APR_INCLUDE_DIR}")
MESSAGE (STATUS "****** DirectAdmin Apache APRUTIL Include dir: ${APRUTIL_INCLUDE_DIR}")
MESSAGE (STATUS "****** DirectAdmin Apache HTTPD Modules dir:   ${HTTPD_MODULES}")
MESSAGE (STATUS "****** DirectAdmin Apache HTTPD Libraries dir: ${APACHE_LIB_DIR}")
MESSAGE (STATUS "****** DirectAdmin Apache HTTPD Bin dir:       ${HTTPD_BIN}")


SET (FINAL_HTTPD_INCLUDE_DIR ${HTTPD_INCLUDE_DIR})
SET (FINAL_APR_INCLUDE_DIR ${APR_INCLUDE_DIR})
SET (FINAL_APRUTIL_INCLUDE_DIR ${APRUTIL_INCLUDE_DIR})
SET (FINAL_HTTPD_MODULES ${HTTPD_MODULES})
SET (FINAL_LIB_DIR ${APACHE_LIB_DIR})
SET (FINAL_HTTPD_BIN ${HTTPD_BIN})

SET (SULSPHP_BIN "\\\"${FINAL_HTTPD_BIN}/sulsphp\\\"")

###########################################################3

# ------ Define sets of sources with their properties

SET(libutil_SRCS
	${LIBUTILSRC}/config.c
	${LIBUTILSRC}/connect.c
	${LIBUTILSRC}/do.c
	${LIBUTILSRC}/parsevars.c
	${LIBUTILSRC}/httpreq.c
)
SET_SOURCE_FILES_PROPERTIES(${libutil_SRCS}
    PROPERTIES COMPILE_FLAGS "-DSULSPHP_BIN=${SULSPHP_BIN} -I${FINAL_HTTPD_INCLUDE_DIR} -I${FINAL_APR_INCLUDE_DIR} -I${FINAL_APRUTIL_INCLUDE_DIR} -std=gnu99 -D${FINAL_APACHE_DEFINE} -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -Wall -g -O2 -pthread"
    OBJECT_DEPENDS src/include/lscapi_config.h
    )

SET(mod_lsapi_SRCS ${SRC}/mod_lsapi/mod_lsapi.c)
SET_SOURCE_FILES_PROPERTIES(${mod_lsapi_SRCS}
    PROPERTIES COMPILE_FLAGS "-DSULSPHP_BIN=${SULSPHP_BIN} -I${FINAL_HTTPD_INCLUDE_DIR} -I${FINAL_APR_INCLUDE_DIR} -I${FINAL_APRUTIL_INCLUDE_DIR} -std=gnu99 -D${FINAL_APACHE_DEFINE} -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -Wall -g -O2 -pthread"
    OBJECT_DEPENDS src/include/lscapi_config.h
    )

SET(sulsphp_SRCS 
     ${SUPPORTSRC}/sulsphp.c
     ${SUPPORTSRC}/service.c
)
SET_SOURCE_FILES_PROPERTIES(${sulsphp_SRCS}
    PROPERTIES COMPILE_FLAGS "-DAP_HTTPD_USER=${AP_HTTPD_USER} -DAP_SULSPHP_MODE -I${FINAL_HTTPD_INCLUDE_DIR} -I${FINAL_APR_INCLUDE_DIR} -I${FINAL_APRUTIL_INCLUDE_DIR} -std=gnu99 -D${FINAL_APACHE_DEFINE} -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -Wall -g -O2 -pthread"
    )

# ------ Set some common things

SET(PACKAGE_VERSION "1.0")

INCLUDE_DIRECTORIES(${INCPATH})

# ------ Describe build targets with their properties

ADD_LIBRARY(mod_lsapi MODULE ${mod_lsapi_SRCS} ${libutil_SRCS})
SET_TARGET_PROPERTIES(mod_lsapi PROPERTIES PREFIX "")
TARGET_LINK_LIBRARIES(mod_lsapi lscapi)
INSTALL(TARGETS mod_lsapi LIBRARY
        DESTINATION ${FINAL_HTTPD_MODULES}
        COMPONENT Runtime
        )


ADD_EXECUTABLE(sulsphp ${sulsphp_SRCS})
TARGET_LINK_LIBRARIES(sulsphp dl pthread)
INSTALL(TARGETS sulsphp RUNTIME
        DESTINATION ${FINAL_HTTPD_BIN}
        PERMISSIONS SETUID OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
        COMPONENT Runtime
        )

