project(mapguide) # CMake base requires and policy tweaks cmake_minimum_required( VERSION 2.6.2 FATAL_ERROR ) # CMP0005: keep escaping behaviour for definitions added via add_definitions() cmake_policy( SET CMP0005 OLD ) # Look first in internal modules set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ) # Set configuration if not defined if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif (NOT CMAKE_BUILD_TYPE) message(STATUS "CMake Build Type is: ${CMAKE_BUILD_TYPE}") # Determine bitness if ((NOT MG_CPU EQUAL 32) AND (NOT MG_CPU EQUAL 64)) message(STATUS "MG_CPU not defined, determining what we're building for based on system bitness") if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(MG_CPU 64) else(CMAKE_SIZEOF_VOID_P EQUAL 8) set(MG_CPU 32) endif(CMAKE_SIZEOF_VOID_P EQUAL 8) message (STATUS "MG_CPU is ${MG_CPU}") endif ((NOT MG_CPU EQUAL 32) AND (NOT MG_CPU EQUAL 64)) # Make CPack available to easy generate binary packages include(CPack) include(CheckFunctionExists) include(CheckIncludeFile) include(CheckCXXSourceCompiles) include(CheckLibraryExists) include(ExternalProject) set(MG_VERSION_MAJOR 3) set(MG_VERSION_MINOR 3) set(MG_VERSION_RELEASE 0) if (NOT MG_VERSION_REV) set(MG_VERSION_REV 0) endif (NOT MG_VERSION_REV) set(MG_VERSION "${MG_VERSION_MAJOR}.${MG_VERSION_MINOR}.${MG_VERSION_RELEASE}") set(MG_VERSION_FULL "${MG_VERSION}.${MG_VERSION_REV}") set(MG_HTTPD_PORT 8008) set(MG_TOMCAT_PORT 8009) set(CSMAP_NO_GRID 1) set(MG_OEM_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Oem") set(MG_OEM_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/Oem") set(MG_OEM_CSMAP_INCLUDE_DIR "${MG_OEM_ROOT_DIR}/CsMap/Include") set(MG_OEM_AGG_DIR "${MG_OEM_ROOT_DIR}/agg-2.4") set(MG_OEM_AGG_INCLUDE_DIR "${MG_OEM_AGG_DIR}/include") set(MG_OEM_AGG_FREETYPE_DIR "${MG_OEM_AGG_DIR}/font_freetype") set(MG_OEM_AGG_SOURCE_DIR "${MG_OEM_AGG_DIR}/src") set(MG_OEM_HTTPD_SOURCE_DIR, "${MG_OEM_ROOT_DIR}/LinuxApt/httpd-2.4.18") set(MG_OEM_DWF_INCLUDE_DIR "${MG_OEM_ROOT_DIR}/DWFTK/develop/global/src") set(MG_COMMON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Common") set(MG_SERVER_COMMON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Server/src/Common") set(MG_SERVER_SERVICES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Server/src/Services") set(MG_SERVER_GWS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Server/src/Gws") set(MG_AUTO_GENERATED_HEADER_DIR "${CMAKE_CURRENT_BINARY_DIR}/IncludeAutogenerated") set(MG_UNIT_TEST_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/UnitTest/TestData") set(MG_COMPONENT_COMMON "common") set(MG_COMPONENT_SERVER "server") set(MG_COMPONENT_WEB "web") # Override install directory to match what the automake build does (/usr/local, rather than /usr/local/lib) set(MG_INSTALL_PREFIX "/usr/local/mapguideopensource-${MG_VERSION}") set(MG_INSTALL_WEB_PREFIX "${MG_INSTALL_PREFIX}/webserverextensions") set(MG_WWWROOT "${MG_INSTALL_WEB_PREFIX}/www") set(MG_INSTALL_SERVER_PREFIX "${MG_INSTALL_PREFIX}/server") set(MG_SERVER_BIN_DIR "${MG_INSTALL_SERVER_PREFIX}/bin") set(MG_INSTALL_COORDSYS_PREFIX "${MG_INSTALL_PREFIX}/share/gis/coordsys") set(CMAKE_INSTALL_PREFIX "${MG_INSTALL_PREFIX}") set(MG_VERSION_SUFFIX "-${MG_VERSION}") macro(set_install_subdir relbase) # Global definitions ( used by all sources ) # Check if is a 64 bits install and use user defined LIB_SUFFIX if(UNIX) set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)") if(MG_CPU EQUAL 64) set(LIB_SUFFIX "64") endif(MG_CPU EQUAL 64) set(LIB_INSTALL_DIR "${relbase}lib${LIB_SUFFIX}") set(BIN_INSTALL_DIR "${relbase}bin") endif(UNIX) endmacro(set_install_subdir) macro(make_install workdir) if (UNIX) install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E chdir ${workdir} make install)") endif (UNIX) endmacro(make_install workdir) macro(install_empty_directory dirname root) install(CODE "file(MAKE_DIRECTORY ${root}/${dirname})") endmacro(install_empty_directory dirname root) if(UNIX) add_definitions(-DFULLPROTO -fPIC -DPIC) endif(UNIX) if (CMAKE_SYSTEM_NAME MATCHES Linux) add_definitions(-DLINUX -DLINUX_IA32 -pthread -Wno-write-strings) endif (CMAKE_SYSTEM_NAME MATCHES Linux) if (CMAKE_COMPILER_IS_GNUCXX) add_definitions(-D__USE_GNU -Wno-deprecated) if(MG_CPU EQUAL 64) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") else(MG_CPU EQUAL 64) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") endif(MG_CPU EQUAL 64) if (CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DDEBUG -D_DEBUG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3") message(STATUS "Adding standard compiler flags for debug") endif (CMAKE_BUILD_TYPE MATCHES DEBUG) endif(CMAKE_COMPILER_IS_GNUCXX) find_package(Sanitizers) find_package(GEOS REQUIRED) find_package(ACE REQUIRED) if (NOT INTERNAL_XERCES) find_package(XercesC REQUIRED) else (NOT INTERNAL_XERCES) message(STATUS "Using internal xerces-c") endif (NOT INTERNAL_XERCES) find_package(GD REQUIRED) find_package(Freetype REQUIRED) find_package(JPEG REQUIRED) find_package(PNG REQUIRED) find_package(FDO REQUIRED) find_package(CppUnit REQUIRED) find_package(TCLAP REQUIRED) find_package(LinuxApt REQUIRED) find_package(DbXmlInternal REQUIRED) if (INTERNAL_XERCES) # This will be the same set(XERCESC_INCLUDE_DIR "${DBXML_INCLUDE_DIR}") endif (INTERNAL_XERCES) find_package(Ant REQUIRED) # Set internal tool paths set(IMAKE_TOOL ${CMAKE_CURRENT_BINARY_DIR}/BuildTools/WebTools/IMake/IMake) set(SWIG_TOOL ${MG_OEM_ROOT_BUILD_DIR}/SWIGEx/swig) set(SWIG_LIB_PATH ${MG_OEM_ROOT_BUILD_DIR}/SWIGEx/Lib) # Set common commands. set(MOVE_COMMAND "mv") if (WITH_JAVA) find_package(Java REQUIRED) find_package(JNI REQUIRED) else (WITH_JAVA) message(STATUS "Skipping optional Java support") endif (WITH_JAVA) # Some helper macros macro(install_symlink target linkname component) # The link target doesn't have to exist at this point in time, the symlink will be valid at install time execute_process(COMMAND ln -sf ${target} ${CMAKE_CURRENT_BINARY_DIR}/${linkname}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${linkname} DESTINATION ${LIB_INSTALL_DIR} COMPONENT ${component}) endmacro(install_symlink) add_subdirectory(BuildTools) add_subdirectory(Oem) add_subdirectory(Common) add_subdirectory(Server) add_subdirectory(Web) add_subdirectory(UnitTest) if (WITH_DESKTOP) add_subdirectory(Desktop) else (WITH_DESKTOP) message(STATUS "Skipping optional mg-desktop support") endif (WITH_DESKTOP)