cmake_minimum_required(VERSION 2.8) INCLUDE(FindProtobuf) FIND_PACKAGE(Protobuf REQUIRED) # Gtest source archive to use SET(GTEST_ARCHIVE gtest-1.7.0.zip) # Where to download archive (if it doesn't exist) SET(GTEST_DLSERVER http://googletest.googlecode.com/files) SET(GTEST_ROOT $ENV{HOME}/Downloads/gtest-1.7.0) function(PROTOBUF_GENERATE_PHP SRCS) if(NOT ARGN) message(SEND_ERROR "Error: PROTOBUF_GENERATE_PHP() called without any proto files") return() endif(NOT ARGN) if(PROTOBUF_GENERATE_PHP_APPEND_PATH) # Create an include path for each file specified foreach(FIL ${ARGN}) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(ABS_PATH ${ABS_FIL} PATH) list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) if(${_contains_already} EQUAL -1) list(APPEND _protobuf_include_path -I ${ABS_PATH}) endif() endforeach() else() set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) endif() set(${SRCS}) foreach(FIL ${ARGN}) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(FIL_WE ${FIL} NAME_WE) list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.proto.php") add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.proto.php" COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ARGS --plugin /usr/local/bin/protoc-gen-php --php_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL} DEPENDS ${ABS_FIL} COMMENT "Running PHP protocol buffer compiler on ${FIL}" VERBATIM ) add_custom_target(protoc-gen-php ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.proto.php") endforeach() set_source_files_properties(${${SRCS}} PROPERTIES GENERATED TRUE) set(${SRCS} ${${SRCS}} PARENT_SCOPE) endfunction() IF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${GTEST_ARCHIVE}) MESSAGE("Downloading file: ${CMAKE_SOURCE_DIR}/${GTEST_ARCHIVE}") FILE(DOWNLOAD ${GTEST_DLSERVER}/${GTEST_ARCHIVE} ${CMAKE_CURRENT_BINARY_DIR}/${GTEST_ARCHIVE}) EXECUTE_PROCESS(COMMAND cmake -E tar zxf ${GTEST_ARCHIVE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) ADD_SUBDIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/gtest-1.7.0 gtest-1.7.0) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}) ENDIF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${GTEST_ARCHIVE}) FILE(GLOB ProtoFiles "${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto") PROTOBUF_GENERATE_PHP(ProtoPHP ${ProtoFiles}) MESSAGE("Generated file: ${ProtoPHP}") PROTOBUF_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles}) MESSAGE("Generated file: ${ProtoSources}") INCLUDE_DIRECTORIES( ${GTEST_ROOT}/include ${PROTOBUF_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) FILE(GLOB SRC_TESTS *.cc) ADD_EXECUTABLE(conformance_test ${SRC_TESTS} ${ProtoSources} ) TARGET_LINK_LIBRARIES(conformance_test pthread ${GTEST_ROOT}/build/libgtest.a ${GTEST_ROOT}/build/libgtest_main.a ${PROTOBUF_LIBRARY} )