[asterisk-scf-commits] asterisk-scf/integration/cmake.git branch "single-api-lib" created.
Commits to the Asterisk SCF project code repositories
asterisk-scf-commits at lists.digium.com
Thu Jan 13 09:10:43 CST 2011
branch "single-api-lib" has been created
at 419edd281ed4e2cf7fec527d6950edc1d7d512fa (commit)
- Log -----------------------------------------------------------------
commit 419edd281ed4e2cf7fec527d6950edc1d7d512fa
Author: David M. Lee <dlee at digium.com>
Date: Mon Jan 10 17:43:44 2011 -0600
Added --dirname; simplified --subdir option.
diff --git a/init-cmake.sh b/init-cmake.sh
index 73c4735..9af97cf 100755
--- a/init-cmake.sh
+++ b/init-cmake.sh
@@ -18,7 +18,8 @@ Script Options
--vs10-64 = Shorthand for -G "Visual Studio 10 Win64"
--make = Shorthand for -G "Unix Makefiles"
--nmake = Shorthand for -G "NMake Makefiles"
- --subdir = Build in ./build/${platform}/\${type} instead of ./build
+ --dirname = Build in ./build/\${name} instead of ./build
+ --subdir = Same as --dirname \${type}
--type = Specify build type. Valid options are debug, release, profile.
--help = Show this help text and exit
@@ -31,8 +32,10 @@ EOF
builddir=./build
# build type. valid options are debug, release, profile
build_type=debug
-# if true, build in ./build/${platform}/${build_type}
+# if true, build in ./build/${build_type}
subdir=false
+# build in ./build/${dirname}
+dirname=
# extra arguments for cmake
cmake_args=()
# source directory
@@ -86,6 +89,10 @@ while test $# -gt 0; do
cmake_output="NMake Makefiles"
shift
;;
+ --dirname)
+ dirname=$2
+ shift 2
+ ;;
--subdir)
subdir=true
shift
@@ -102,6 +109,9 @@ while test $# -gt 0; do
shift
break
;;
+ -C*|-D*|-U*|-G*|-W*|-E|-i|-L*|-N|-P*) # recognized args
+ break
+ ;;
*) # unrecognized arg; pass this and rest on to cmake
echo "Unrecognized option $1. Passing on to cmake." >&2
break
@@ -119,8 +129,12 @@ if ! test -f CMakeLists.txt; then
fi
if ${subdir}; then
- builddir=./build/${platform}/${build_type}
- srcdir=../../..
+ dirname=${build_type}
+fi
+
+if test ${dirname}; then
+ builddir=./build/${dirname}
+ srcdir=../..
fi
mkdir -p ${builddir}
commit e5b3aebd2f8feb16bfcf4a8984cf7dea543e8496
Author: David M. Lee <dlee at digium.com>
Date: Mon Jan 10 11:37:45 2011 -0600
Set variables for installation directories.
diff --git a/AsteriskSCF.cmake b/AsteriskSCF.cmake
index 4a986d3..c4831c5 100644
--- a/AsteriskSCF.cmake
+++ b/AsteriskSCF.cmake
@@ -55,6 +55,57 @@ if(NOT integrated_build)
message(FATAL_ERROR "This project can not be built in a non-integrated fashion. Please use the gitall script present in the gitall repository.")
endif()
+# installation directories (these are all relative to ${CMAKE_INSTALL_PREFIX})
+set(INSTALL_SYS_CONF_DIR etc CACHE FILEPATH
+ "read-only data files that pertain to a single machine")
+set(INSTALL_BIN_DIR bin CACHE FILEPATH
+ "executable programs that users can run")
+set(INSTALL_LIB_DIR lib CACHE FILEPATH
+ "object files and libraries of object code")
+set(INSTALL_DATA_ROOT_DIR share CACHE FILEPATH
+ "read-only architecture-independent data files")
+set(INSTALL_DATA_DIR ${INSTALL_DATA_ROOT_DIR} CACHE FILEPATH
+ "idiosyncratic read-only architecture-independent data files for this program")
+set(INSTALL_INCLUDE_DIR include CACHE FILEPATH
+ "directory for installing header files")
+set(INSTALL_LOCAL_STATE_DIR var CACHE FILEPATH
+ "data files which the programs modify while they run, and that pertain to one specific machine")
+
+set(ASTERISK_SCF_INSTALL_CONF_DIR ${INSTALL_SYS_CONF_DIR}/asterisk-scf
+ CACHE FILEPATH "AsteriskSCF files")
+set(ASTERISK_SCF_INSTALL_BIN_DIR ${INSTALL_BIN_DIR} CACHE FILEPATH
+ "AsteriskSCF executable programs")
+set(ASTERISK_SCF_INSTALL_LIB_DIR ${INSTALL_LIB_DIR} CACHE FILEPATH
+ "AsteriskSCF libraries")
+set(ASTERISK_SCF_INSTALL_ICEBOX_DIR ${INSTALL_LIB_DIR}/asterisk-scf/icebox
+ CACHE FILEPATH "AsteriskSCF Icebox modules")
+set(ASTERISK_SCF_INSTALL_LOCAL_STATE_DIR
+ ${INSTALL_LOCAL_STATE_DIR}/lib/asterisk-scf CACHE FILEPATH
+ "AsteriskSCF local state files")
+set(ASTERISK_SCF_INSTALL_LOG_FILE ${INSTALL_LOCAL_STATE_DIR}/log/asterisk-scf.log
+ CACHE FILEPATH "AsteriskSCF logfile")
+set(ASTERISK_SCF_INSTALL_INCLUDE_DIR ${INSTALL_INCLUDE_DIR} CACHE FILEPATH
+ "AsteriskSCF directory for installing include files")
+set(ASTERISK_SCF_INSTALL_SLICE_DIR ${INSTALL_DATA_DIR}/asterisk-scf/slice
+ CACHE FILEPATH "AsteriskSCF directory for installing slice files")
+
+mark_as_advanced(
+ INSTALL_SYS_CONF_DIR
+ INSTALL_BIN_DIR
+ INSTALL_LIB_DIR
+ INSTALL_DATA_ROOT_DIR
+ INSTALL_DATA_DIR
+ INSTALL_INCLUDE_DIR
+ INSTALL_LOCAL_STATE_DIR
+ ASTERISK_SCF_INSTALL_CONF_DIR
+ ASTERISK_SCF_INSTALL_BIN_DIR
+ ASTERISK_SCF_INSTALL_LIB_DIR
+ ASTERISK_SCF_INSTALL_ICEBOX_DIR
+ ASTERISK_SCF_INSTALL_LOCAL_STATE_DIR
+ ASTERISK_SCF_INSTALL_LOG_FILE
+ ASTERISK_SCF_INSTALL_INCLUDE_DIR
+ ASTERISK_SCF_INSTALL_SLICE_DIR)
+
# Use a compile test to see if shared_ptr is supported. If present then C++0x support exists.
if(CMAKE_COMPILER_IS_GNUCXX)
try_compile(SHARED_PTR_PRESENT
commit 24c4357778cdb9591d003130319ef028367c8c31
Author: David M. Lee <dlee at digium.com>
Date: Mon Jan 10 11:30:59 2011 -0600
Mark profile flags as advanced.
The similar flags for release and debug are also marked as advanced, so
mark the profile flags as advanced so they don't clutter up cmake-gui.
diff --git a/AsteriskSCF.cmake b/AsteriskSCF.cmake
index e1d7330..4a986d3 100644
--- a/AsteriskSCF.cmake
+++ b/AsteriskSCF.cmake
@@ -118,6 +118,11 @@ if(NOT WIN32)
set(CMAKE_EXE_LINKER_FLAGS_PROFILE
"${CMAKE_EXE_LINKER_FLAGS_DEBUG}"
CACHE STRING "Flags used by the linker during profile builds." FORCE)
+
+ mark_as_advanced(
+ CMAKE_C_FLAGS_PROFILE
+ CMAKE_CXX_FLAGS_PROFILE
+ CMAKE_EXE_LINKER_FLAGS_PROFILE)
endif()
if(${CMAKE_BUILD_TYPE} STREQUAL profile)
commit 2c88d8184d586c3468902206d29d7bf5d05098da
Author: Kevin P. Fleming <kpfleming at digium.com>
Date: Fri Jan 7 15:38:38 2011 -0600
Remove all multi-language support... since this will only ever be
used for C++ builds.
diff --git a/AsteriskSCF.cmake b/AsteriskSCF.cmake
index 73dfa67..e1d7330 100644
--- a/AsteriskSCF.cmake
+++ b/AsteriskSCF.cmake
@@ -1,7 +1,7 @@
#
# Asterisk SCF -- An open-source communications framework.
#
-# Copyright (C) 2010, Digium, Inc.
+# Copyright (C) 2010-2011, Digium, Inc.
#
# See http://www.asterisk.org for more information about
# the Asterisk SCF project. Please do not directly contact
@@ -21,10 +21,10 @@
# * BOOST_ROOT - The preferred installation prefix for searching for
# Boost. Set this if the module has problems finding
# the proper Boost installation.
-# * BOOST_INCLUDEDIR - Set this to the include directory of Boost, if the
+# * BOOST_INCLUDEDIR - Set this to the include directory of Boost, if the
# module has problems finding the proper Boost
# installation
-# * BOOST_LIBRARYDIR - Set this to the lib directory of Boost, if the
+# * BOOST_LIBRARYDIR - Set this to the lib directory of Boost, if the
# module has problems finding the proper Boost
# installation
# * ICE_HOME - The preferred installation prefix for searching for Ice. Set
@@ -47,38 +47,38 @@
#
if(CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
- message(FATAL_ERROR "This project must not be built in the source directory")
+ message(FATAL_ERROR "This project must not be built in the source directory")
endif()
# Only permit integrated builds to be done at this time
if(NOT integrated_build)
- message(FATAL_ERROR "This project can not be built in a non-integrated fashion. Please use the gitall script present in the gitall repository.")
+ message(FATAL_ERROR "This project can not be built in a non-integrated fashion. Please use the gitall script present in the gitall repository.")
endif()
# Use a compile test to see if shared_ptr is supported. If present then C++0x support exists.
if(CMAKE_COMPILER_IS_GNUCXX)
- try_compile(SHARED_PTR_PRESENT
- ${CMAKE_BINARY_DIR}
- ${CMAKE_SOURCE_DIR}/cmake/tests/SharedPtr.cpp
- COMPILE_DEFINITIONS "-std=c++0x"
- OUTPUT_VARIABLE OUTPUT
+ try_compile(SHARED_PTR_PRESENT
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/cmake/tests/SharedPtr.cpp
+ COMPILE_DEFINITIONS "-std=c++0x"
+ OUTPUT_VARIABLE OUTPUT
)
- if(SHARED_PTR_PRESENT)
- message(STATUS "Support for C++0x Enabled")
- add_definitions("-DCPP_ZEROX_SUPPORT")
- set(CPP_ZEROX_STD "-std=c++0x")
- else()
- message(STATUS "Support for C++0x Disabled")
- endif()
+ if(SHARED_PTR_PRESENT)
+ message(STATUS "Support for C++0x Enabled")
+ add_definitions("-DCPP_ZEROX_SUPPORT")
+ set(CPP_ZEROX_STD "-std=c++0x")
+ else()
+ message(STATUS "Support for C++0x Disabled")
+ endif()
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
# If a build type has not been explicitly specified then use debug
if(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE debug CACHE STRING
- "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Profile."
- FORCE)
+ set(CMAKE_BUILD_TYPE debug CACHE STRING
+ "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Profile."
+ FORCE)
endif()
# since Debug, debug and DeBuG all mean the same thing to cmake, tolower it
@@ -89,61 +89,61 @@ string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
find_package(Threads REQUIRED)
if(CMAKE_SYSTEM MATCHES "SunOS.*")
- set(CMAKE_CXX_FLAGS "-pthreads ")
+ set(CMAKE_CXX_FLAGS "-pthreads ")
endif()
if(CMAKE_COMPILER_IS_GNUC)
- set(CMAKE_C_FLAGS_DEBUG "-Werror -Wall -g3"
- CACHE STRING "Flags used by the compiler during debug builds." FORCE)
+ set(CMAKE_C_FLAGS_DEBUG "-Werror -Wall -g3"
+ CACHE STRING "Flags used by the compiler during debug builds." FORCE)
endif()
if(CMAKE_COMPILER_IS_GNUCXX)
- set(CMAKE_CXX_FLAGS "${CPP_ZEROX_STD}"
- CACHE STRING "Flags used by the compiler during release builds." FORCE)
- set(CMAKE_CXX_FLAGS_DEBUG "-Werror -Wall -g3"
- CACHE STRING "Flags used by the compiler during debug builds." FORCE)
+ set(CMAKE_CXX_FLAGS "${CPP_ZEROX_STD}"
+ CACHE STRING "Flags used by the compiler during release builds." FORCE)
+ set(CMAKE_CXX_FLAGS_DEBUG "-Werror -Wall -g3"
+ CACHE STRING "Flags used by the compiler during debug builds." FORCE)
endif()
if(WIN32 AND ${CMAKE_BUILD_TYPE} STREQUAL profile)
- message(FATAL_ERROR "Profile builds not supported")
+ message(FATAL_ERROR "Profile builds not supported")
endif()
if(NOT WIN32)
- message(STATUS "Adding profile flags")
- set(CMAKE_C_FLAGS_PROFILE
- "${CMAKE_C_FLAGS_DEBUG} -ftest-coverage -fprofile-arcs"
- CACHE STRING "Flags used by the compiler during profile builds." FORCE)
- set(CMAKE_CXX_FLAGS_PROFILE
- "${CMAKE_CXX_FLAGS_DEBUG} -ftest-coverage -fprofile-arcs"
- CACHE STRING "Flags used by the compiler during profile builds." FORCE)
- set(CMAKE_EXE_LINKER_FLAGS_PROFILE
- "${CMAKE_EXE_LINKER_FLAGS_DEBUG}"
- CACHE STRING "Flags used by the linker during profile builds." FORCE)
+ message(STATUS "Adding profile flags")
+ set(CMAKE_C_FLAGS_PROFILE
+ "${CMAKE_C_FLAGS_DEBUG} -ftest-coverage -fprofile-arcs"
+ CACHE STRING "Flags used by the compiler during profile builds." FORCE)
+ set(CMAKE_CXX_FLAGS_PROFILE
+ "${CMAKE_CXX_FLAGS_DEBUG} -ftest-coverage -fprofile-arcs"
+ CACHE STRING "Flags used by the compiler during profile builds." FORCE)
+ set(CMAKE_EXE_LINKER_FLAGS_PROFILE
+ "${CMAKE_EXE_LINKER_FLAGS_DEBUG}"
+ CACHE STRING "Flags used by the linker during profile builds." FORCE)
endif()
if(${CMAKE_BUILD_TYPE} STREQUAL profile)
- message(STATUS "Disabling shared libs.")
- set(BUILD_SHARED_LIBS false
- CACHE BOOL "Enables building shared libraries." FORCE)
+ message(STATUS "Disabling shared libs.")
+ set(BUILD_SHARED_LIBS false
+ CACHE BOOL "Enables building shared libraries." FORCE)
endif()
if(NOT DEFINED BUILD_SHARED_LIBS)
- message(STATUS "Enabling shared libs.")
- set(BUILD_SHARED_LIBS true
- CACHE BOOL "Enables building shared libraries." FORCE)
+ message(STATUS "Enabling shared libs.")
+ set(BUILD_SHARED_LIBS true
+ CACHE BOOL "Enables building shared libraries." FORCE)
endif()
# Enable the use of CTest for running unit tests
enable_testing()
if(UNIX AND EXISTS "${CMAKE_SOURCE_DIR}/.svn")
- add_custom_target(update COMMAND svn update WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Updating checkout")
+ add_custom_target(update COMMAND svn update WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Updating checkout")
elseif(UNIX AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
- add_custom_target(update COMMAND git pull WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Updating clone")
- add_custom_target(pull COMMAND git pull WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Updating clone")
+ add_custom_target(update COMMAND git pull WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Updating clone")
+ add_custom_target(pull COMMAND git pull WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Updating clone")
endif()
macro(set_cache_var)
- set(${ARGV} CACHE INTERNAL Bob FORCE)
+ set(${ARGV} CACHE INTERNAL Bob FORCE)
endmacro()
# Function which scans a path for matching files or directories,
@@ -152,321 +152,254 @@ endmacro()
# if there were no matches. Single-character globs (?) can
# be used in the base string, but not multi-character globs (*).
function(find_best_version output base)
- get_filename_component(base_full "${base}" ABSOLUTE)
- file(GLOB path_list "${base_full}*")
- string(LENGTH "${base_full}" base_length)
- foreach(path ${path_list})
- get_filename_component(path_full "${path}" ABSOLUTE)
- string(LENGTH "${path_full}" path_length)
- math(EXPR get "${path_length} - ${base_length}")
- string(SUBSTRING "${path_full}" ${base_length} ${get} ver)
- if(NOT DEFINED best_ver)
- set(best_ver ${ver})
- set(best_path "${path_full}")
- elseif(best_ver VERSION_LESS ver)
- set(best_ver ${ver})
- set(best_path "${path_full}")
- endif()
- endforeach()
- if(DEFINED best_ver)
- set(${output} "${best_path}" PARENT_SCOPE)
- else()
- set(${output} "NOTFOUND" PARENT_SCOPE)
- endif()
+ get_filename_component(base_full "${base}" ABSOLUTE)
+ file(GLOB path_list "${base_full}*")
+ string(LENGTH "${base_full}" base_length)
+ foreach(path ${path_list})
+ get_filename_component(path_full "${path}" ABSOLUTE)
+ string(LENGTH "${path_full}" path_length)
+ math(EXPR get "${path_length} - ${base_length}")
+ string(SUBSTRING "${path_full}" ${base_length} ${get} ver)
+ if(NOT DEFINED best_ver)
+ set(best_ver ${ver})
+ set(best_path "${path_full}")
+ elseif(best_ver VERSION_LESS ver)
+ set(best_ver ${ver})
+ set(best_path "${path_full}")
+ endif()
+ endforeach()
+ if(DEFINED best_ver)
+ set(${output} "${best_path}" PARENT_SCOPE)
+ else()
+ set(${output} "NOTFOUND" PARENT_SCOPE)
+ endif()
endfunction()
# Find Ice installation for a specific major/minor version
function(find_ICE version)
- set(ice "$ENV{ICE_HOME}")
- if(NOT ice)
- if(WIN32)
- find_best_version(ice "C:/Ice-${version}")
- elseif(UNIX)
- find_best_version(ice "/opt/Ice-${version}")
- endif()
- endif()
-
- if(NOT ice)
- message(FATAL_ERROR "Could not find an installation of Ice with version ${version}")
- endif()
- find_path(ICE_SLICE_DIR Ice/Current.ice PATHS "${ice}/../slice" "${ice}/slice" NO_DEFAULT_PATH)
- if(ICE_SLICE_DIR)
- message(STATUS "Found Ice Slice definitions in ${ICE_SLICE_DIR}")
- else()
- message(FATAL_ERROR "Ice installation located at ${ice} is incomplete or broken (missing 'slice' directory)")
- endif()
- file(TO_CMAKE_PATH "${ice}" ice_cmake_path)
- set_cache_var(ICE_DIR "${ice_cmake_path}")
-
- # find icebox executable
- # XXX Need to look for iceboxd.exe for debug windows builds
- find_program(ICEBOX icebox PATHS "${ICE_DIR}/bin" NO_DEFAULT_PATH)
-
- if(ICEBOX)
- message(STATUS "Found icebox at ${ICEBOX}")
- else()
- message(WARNING "Failed to find icebox ${ICE_DIR}")
- endif()
-endfunction()
-
-# Find Ice headers and libraries for CXX components
-function(find_ICE_CXX)
- find_path(ICE_CXX_INCLUDE_DIR Ice/Ice.h PATHS "${ICE_DIR}/include" NO_DEFAULT_PATH)
- if(ICE_CXX_INCLUDE_DIR)
- message(STATUS "Found Ice headers for CXX in ${ICE_CXX_INCLUDE_DIR}")
- else()
- message(FATAL_ERROR "Failed to find Ice headers for CXX")
- endif()
- # This block essentially tricks the GNU compiler into treating the Ice header files as system headers. This has
- # the benefit of having warnings emitted by the headers NOT treated as errors, even if the compiler has been told
- # to do so. This is currently being utilized by the C++0x support in this file so that Ice itself does not have to
- # be updated to be C++0x safe.
- if(CMAKE_COMPILER_IS_GNUCXX)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${ICE_CXX_INCLUDE_DIR}"
- CACHE STRING "Flags used by the compiler during release builds." FORCE)
- endif()
-endfunction()
-
-# Find an Ice library for CXX components
-function(find_ICE_CXX_library LIBRARY)
- if(NOT ICE_CXX_LIB_${LIBRARY})
- if(WIN32)
- string(TOLOWER ${LIBRARY} lib)
- find_library(ICE_CXX_LIB_RELEASE_${LIBRARY} ${lib} PATHS "${ICE_DIR}/lib" NO_DEFAULT_PATH)
- if(ICE_CXX_LIB_RELEASE_${LIBRARY})
- message(STATUS "Found Ice ${LIBRARY} library for CXX (release build) at ${ICE_CXX_LIB_RELEASE_${LIBRARY}}")
- list(APPEND ficxxl_libs optimized "${ICE_CXX_LIB_RELEASE_${LIBRARY}}")
- endif()
- find_library(ICE_CXX_LIB_DEBUG_${LIBRARY} ${lib}d PATHS "${ICE_DIR}/lib" NO_DEFAULT_PATH)
- if(ICE_CXX_LIB_DEBUG_${LIBRARY})
- message(STATUS "Found Ice ${LIBRARY} library for CXX (debug build) at ${ICE_CXX_LIB_DEBUG_${LIBRARY}}")
- list(APPEND ficxxl_libs debug "${ICE_CXX_LIB_DEBUG_${LIBRARY}}")
- endif()
- if(ficxxl_libs)
- set_cache_var(ICE_CXX_LIB_${LIBRARY} ${ficxxl_libs})
- else()
- message(FATAL_ERROR "Failed to find Ice ${LIBRARY} library for CXX")
- endif()
- elseif(UNIX)
- find_library(ICE_CXX_LIB_${LIBRARY} ${LIBRARY} PATHS "${ICE_DIR}/lib" "${ICE_DIR}/lib32" "${ICE_DIR}/lib64" NO_DEFAULT_PATH)
- if(ICE_CXX_LIB_${LIBRARY})
- message(STATUS "Found Ice ${LIBRARY} library for CXX at ${ICE_CXX_LIB_${LIBRARY}}")
- else()
- message(FATAL_ERROR "Failed to find Ice ${LIBRARY} library for CXX")
- endif()
- endif()
- endif()
-
- if(UNIX)
- get_filename_component(library_path ${ICE_CXX_LIB_${LIBRARY}} PATH)
- link_directories(${library_path})
- endif()
-endfunction()
-
-# Find an Ice assembly for CSharp components
-function(find_ICE_CSharp_library LIBRARY)
- if(NOT ICE_CSharp_LIB_${LIBRARY})
- find_file(ICE_CSharp_LIB_${LIBRARY} ${LIBRARY}.dll PATHS "${ICE_DIR}/bin" NO_DEFAULT_PATH)
- if(ICE_CSharp_LIB_${LIBRARY})
- message(STATUS "Found Ice ${LIBRARY} assembly for CSharp at ${ICE_CSharp_LIB_${LIBRARY}}")
- else()
- message(FATAL_ERROR "Failed to find Ice ${LIBRARY} assembly for CSharp")
- endif()
- endif()
+ set(ice "$ENV{ICE_HOME}")
+ if(NOT ice)
+ if(WIN32)
+ find_best_version(ice "C:/Ice-${version}")
+ elseif(UNIX)
+ find_best_version(ice "/opt/Ice-${version}")
+ endif()
+ endif()
+
+ if(NOT ice)
+ message(FATAL_ERROR "Could not find an installation of Ice with version ${version}")
+ endif()
+ find_path(ICE_SLICE_DIR Ice/Current.ice PATHS "${ice}/../slice" "${ice}/slice" NO_DEFAULT_PATH)
+ if(ICE_SLICE_DIR)
+ message(STATUS "Found Ice Slice definitions in ${ICE_SLICE_DIR}")
+ else()
+ message(FATAL_ERROR "Ice installation located at ${ice} is incomplete or broken (missing 'slice' directory)")
+ endif()
+ file(TO_CMAKE_PATH "${ice}" ice_cmake_path)
+ set_cache_var(ICE_DIR "${ice_cmake_path}")
+
+ # find icebox executable
+ # XXX Need to look for iceboxd.exe for debug windows builds
+ find_program(ICEBOX icebox PATHS "${ICE_DIR}/bin" NO_DEFAULT_PATH)
+
+ if(ICEBOX)
+ message(STATUS "Found icebox at ${ICEBOX}")
+ else()
+ message(WARNING "Failed to find icebox ${ICE_DIR}")
+ endif()
+ find_path(ICE_INCLUDE_DIR Ice/Ice.h PATHS "${ICE_DIR}/include" NO_DEFAULT_PATH)
+ if(ICE_INCLUDE_DIR)
+ message(STATUS "Found Ice headers in ${ICE_INCLUDE_DIR}")
+ else()
+ message(FATAL_ERROR "Failed to find Ice headers")
+ endif()
+ # This block essentially tricks the GNU compiler into treating the Ice header files as system headers. This has
+ # the benefit of having warnings emitted by the headers NOT treated as errors, even if the compiler has been told
+ # to do so. This is currently being utilized by the C++0x support in this file so that Ice itself does not have to
+ # be updated to be C++0x safe.
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${ICE_INCLUDE_DIR}"
+ CACHE STRING "Flags used by the compiler during release builds." FORCE)
+ endif()
endfunction()
-# Find an Ice module for Java components
-function(find_ICE_Java_library LIBRARY)
- if(NOT ICE_Java_LIB_${LIBRARY})
- find_file(ICE_Java_LIB_${LIBRARY} ${LIBRARY}.jar PATHS "${ICE_DIR}/lib" NO_DEFAULT_PATH)
- if(ICE_Java_LIB_${LIBRARY})
- message(STATUS "Found Ice ${LIBRARY} module for Java at ${ICE_Java_LIB_${LIBRARY}}")
- else()
- message(FATAL_ERROR "Failed to find Ice ${LIBRARY} module for Java")
- endif()
- endif()
+# Find an Ice library.
+function(find_ICE_library LIBRARY)
+ if(NOT ICE_LIB_${LIBRARY})
+ if(WIN32)
+ string(TOLOWER ${LIBRARY} lib)
+ find_library(ICE_LIB_RELEASE_${LIBRARY} ${lib} PATHS "${ICE_DIR}/lib" NO_DEFAULT_PATH)
+ if(ICE_LIB_RELEASE_${LIBRARY})
+ message(STATUS "Found Ice '${LIBRARY}' library (release build) at ${ICE_LIB_RELEASE_${LIBRARY}}")
+ list(APPEND ficxxl_libs optimized "${ICE_LIB_RELEASE_${LIBRARY}}")
+ endif()
+ find_library(ICE_LIB_DEBUG_${LIBRARY} ${lib}d PATHS "${ICE_DIR}/lib" NO_DEFAULT_PATH)
+ if(ICE_LIB_DEBUG_${LIBRARY})
+ message(STATUS "Found Ice '${LIBRARY}' library (debug build) at ${ICE_LIB_DEBUG_${LIBRARY}}")
+ list(APPEND ficxxl_libs debug "${ICE_LIB_DEBUG_${LIBRARY}}")
+ endif()
+ if(ficxxl_libs)
+ set_cache_var(ICE_LIB_${LIBRARY} ${ficxxl_libs})
+ else()
+ message(FATAL_ERROR "Failed to find Ice '${LIBRARY}' library")
+ endif()
+ elseif(UNIX)
+ find_library(ICE_LIB_${LIBRARY} ${LIBRARY} PATHS "${ICE_DIR}/lib" "${ICE_DIR}/lib32" "${ICE_DIR}/lib64" NO_DEFAULT_PATH)
+ if(ICE_LIB_${LIBRARY})
+ message(STATUS "Found Ice '${LIBRARY}' library at ${ICE_LIB_${LIBRARY}}")
+ else()
+ message(FATAL_ERROR "Failed to find Ice '${LIBRARY}' library")
+ endif()
+ endif()
+ endif()
+
+ if(UNIX)
+ get_filename_component(library_path ${ICE_LIB_${LIBRARY}} PATH)
+ link_directories(${library_path})
+ endif()
endfunction()
-# Find a Boost library for CXX components
+# Find a Boost library.
function(find_Boost_library LIBRARY)
+ if(NOT Boost_FOUND)
+ set(Boost_ADDITIONAL_VERSIONS "1.39" "1.39.0" "1.40" "1.40.0" "1.41" "1.41.0" "1.42" "1.42.0" "1.44" "1.44.0")
+ find_package(Boost)
if(NOT Boost_FOUND)
- set(Boost_ADDITIONAL_VERSIONS "1.39" "1.39.0" "1.40" "1.40.0" "1.41" "1.41.0" "1.42" "1.42.0" "1.44" "1.44.0")
- find_package(Boost)
- if(NOT Boost_FOUND)
- message(FATAL_ERROR "Boost libraries not found")
- endif()
- set(Boost_CORE_FOUND "bazinga" PARENT_SCOPE)
- set(Boost_CORE_FOUND "bazinga")
- endif()
- string(TOUPPER ${LIBRARY} libtag)
+ message(FATAL_ERROR "Boost libraries not found")
+ endif()
+ set(Boost_CORE_FOUND "bazinga" PARENT_SCOPE)
+ set(Boost_CORE_FOUND "bazinga")
+ endif()
+ string(TOUPPER ${LIBRARY} libtag)
+ if(NOT Boost_${libtag}_FOUND)
+ find_package(Boost COMPONENTS ${LIBRARY})
if(NOT Boost_${libtag}_FOUND)
- find_package(Boost COMPONENTS ${LIBRARY})
- if(NOT Boost_${libtag}_FOUND)
- message(FATAL_ERROR "Failed to find Boost library ${LIBRARY}")
- endif()
+ message(FATAL_ERROR "Failed to find Boost library ${LIBRARY}")
endif()
+ endif()
endfunction()
# Function which initializes project specific things
function(asterisk_scf_project NAME ICE_VERSION)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one language to this function")
- endif()
- message(STATUS "Setting up project ${NAME} for languages ${ARGN}")
- set(ASTERISK_SCF_PROJECT_LANGUAGES ${ARGN} PARENT_SCOPE)
- set(ASTERISK_SCF_ICE_VERSION ${ICE_VERSION} PARENT_SCOPE)
- project(${NAME} ${ARGN})
- # On Windows, IceBox C++ services must be compiled with some symbols exported;
- # the source code should use ASTERISK_SCF_ICEBOX_EXPORT to accomplish this, and this
-
- if(WIN32)
- message(STATUS "Setting ASTERISK_SCF_ICEBOX_EXPORT definition for Windows IceBox services")
- add_definitions(-DASTERISK_SCF_ICEBOX_EXPORT=__declspec\(dllexport\))
- else()
- add_definitions(-DASTERISK_SCF_ICEBOX_EXPORT=)
- endif()
- # On Windows, 'debug' libraries should have a "d" suffix to indicate that they
- # are debug libraries
- if(WIN32)
- set(CMAKE_DEBUG_POSTFIX "d" PARENT_SCOPE)
- endif()
- find_ICE(${ICE_VERSION})
- foreach(l ${ARGN})
- set(ASTERISK_SCF_ICE_LIBRARIES_${l} Ice PARENT_SCOPE)
- # Perform requirement checking for each language to be used in the project
- if(l STREQUAL "Java")
- message(STATUS "Performing requirement checks for Java components")
- find_ICE_Java_library(Ice)
- message(STATUS "Passed requirement checks for Java components")
- elseif(l STREQUAL "CSharp")
- message(STATUS "Performing requirement checks for CSharp components")
- find_ICE_CSharp_library(Ice)
- message(STATUS "Passed requirement checks for CSharp components")
- elseif(l STREQUAL "CXX")
- message(STATUS "Performing requirement checks for CXX components")
- find_ICE_CXX()
- find_ICE_CXX_library(Ice)
- find_ICE_CXX_library(IceUtil)
- if(WIN32)
- # On Windows, the IceUtil library must be explicitly linked
- set(ASTERISK_SCF_ICE_LIBRARIES_${l} Ice IceUtil PARENT_SCOPE)
- endif()
- message(STATUS "Include directories ${ICE_CXX_INCLUDE_DIR}")
- include_directories("${ICE_CXX_INCLUDE_DIR}")
- message(STATUS "Passed requirement checks for CXX components")
- else()
- message(FATAL_ERROR "Unsupported component language ${l}")
- endif()
- endforeach()
+ message(STATUS "Setting up project ${NAME} for Ice version ${ICE_VERSION}")
+ set(ASTERISK_SCF_ICE_VERSION ${ICE_VERSION} PARENT_SCOPE)
+ project(${NAME} CXX)
+ # On Windows, IceBox C++ services must be compiled with some symbols exported;
+ # the source code should use ASTERISK_SCF_ICEBOX_EXPORT to accomplish this, and this
+ if(WIN32)
+ message(STATUS "Setting ASTERISK_SCF_ICEBOX_EXPORT definition for Windows IceBox services")
+ add_definitions(-DASTERISK_SCF_ICEBOX_EXPORT=__declspec\(dllexport\))
+ else()
+ add_definitions(-DASTERISK_SCF_ICEBOX_EXPORT=)
+ endif()
+ # On Windows, 'debug' libraries should have a "d" suffix to indicate that they
+ # are debug libraries
+ if(WIN32)
+ set(CMAKE_DEBUG_POSTFIX "d" PARENT_SCOPE)
+ endif()
+ find_ICE(${ICE_VERSION})
+ message(STATUS "Performing requirement checks for components")
+ find_ICE_library(Ice)
+ find_ICE_library(IceUtil)
+ if(WIN32)
+ # On Windows, the IceUtil library must be explicitly linked
+ set(ASTERISK_SCF_ICE_LIBRARIES Ice IceUtil PARENT_SCOPE)
+ else()
+ set(ASTERISK_SCF_ICE_LIBRARIES Ice PARENT_SCOPE)
+ endif()
+ message(STATUS "Include directories ${ICE_INCLUDE_DIR}")
+ include_directories("${ICE_INCLUDE_DIR}")
+ message(STATUS "Passed requirement checks for CXX components")
endfunction()
# Function which adds Ice libraries to all components in the current
# directory and below
function(asterisk_scf_add_ice_libraries)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one library to this function")
- endif()
- foreach(lang ${ASTERISK_SCF_PROJECT_LANGUAGES})
- set(libs ${ASTERISK_SCF_ICE_LIBRARIES_${lang}})
- foreach(lib ${ARGN})
- if(lang STREQUAL "Java")
- find_ICE_Java_library(${lib})
- elseif(lang STREQUAL "CSharp")
- find_ICE_CSharp_library(${lib})
- elseif(lang STREQUAL "CXX")
- find_ICE_CXX_library(${lib})
- endif()
- list(APPEND libs ${lib})
- endforeach()
- list(REMOVE_DUPLICATES libs)
- set(ASTERISK_SCF_ICE_LIBRARIES_${lang} ${libs} PARENT_SCOPE)
- endforeach()
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one library to this function")
+ endif()
+ set(libs ${ASTERISK_SCF_ICE_LIBRARIES})
+ foreach(lib ${ARGN})
+ find_ICE_library(${lib})
+ list(APPEND libs ${lib})
+ endforeach()
+ list(REMOVE_DUPLICATES libs)
+ set(ASTERISK_SCF_ICE_LIBRARIES ${libs} PARENT_SCOPE)
endfunction()
# Function which adds Boost libraries to all components in the current
# directory and below
function(asterisk_scf_add_boost_libraries)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one library to this function")
- endif()
- set(libs ${ASTERISK_SCF_BOOST_LIBRARIES})
- # By default we are disabling boost auto-linking and specifying dynamic linking.
- add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_ALL_DYN_LINK)
- foreach(lib ${ARGN})
- find_Boost_library(${lib})
- list(APPEND libs ${lib})
- endforeach()
- list(REMOVE_DUPLICATES libs)
- set(ASTERISK_SCF_BOOST_LIBRARIES ${libs} PARENT_SCOPE)
- include_directories(${Boost_INCLUDE_DIR})
- link_directories(${Boost_LIBRARY_DIRS})
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one library to this function")
+ endif()
+ set(libs ${ASTERISK_SCF_BOOST_LIBRARIES})
+ # By default we are disabling boost auto-linking and specifying dynamic linking.
+ add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_ALL_DYN_LINK)
+ foreach(lib ${ARGN})
+ find_Boost_library(${lib})
+ list(APPEND libs ${lib})
+ endforeach()
+ list(REMOVE_DUPLICATES libs)
+ set(ASTERISK_SCF_BOOST_LIBRARIES ${libs} PARENT_SCOPE)
+ include_directories(${Boost_INCLUDE_DIR})
+ link_directories(${Boost_LIBRARY_DIRS})
endfunction()
# Ensures that a list of paths are all absolute paths.
macro(ensure_abs_paths pathlist)
- unset(eap_temp)
- foreach(p ${${pathlist}})
- get_filename_component(newpath "${p}" ABSOLUTE)
- list(APPEND eap_temp "${newpath}")
- endforeach()
- list(REMOVE_DUPLICATES eap_temp)
- set(${pathlist} ${eap_temp})
+ unset(eap_temp)
+ foreach(p ${${pathlist}})
+ get_filename_component(newpath "${p}" ABSOLUTE)
+ list(APPEND eap_temp "${newpath}")
+ endforeach()
+ list(REMOVE_DUPLICATES eap_temp)
+ set(${pathlist} ${eap_temp})
endmacro()
# Function which remembers include directories needed for a particular Slice target
function(asterisk_scf_slice_include_directories)
- set(paths ${ARGN})
- ensure_abs_paths(paths)
- if(SLICE_INCLUDE_DIRECTORIES)
- list(INSERT paths 0 ${SLICE_INCLUDE_DIRECTORIES})
- endif()
- list(REMOVE_DUPLICATES paths)
- set(SLICE_INCLUDE_DIRECTORIES ${paths} PARENT_SCOPE)
+ set(paths ${ARGN})
+ ensure_abs_paths(paths)
+ if(SLICE_INCLUDE_DIRECTORIES)
+ list(INSERT paths 0 ${SLICE_INCLUDE_DIRECTORIES})
+ endif()
+ list(REMOVE_DUPLICATES paths)
+ set(SLICE_INCLUDE_DIRECTORIES ${paths} PARENT_SCOPE)
endfunction()
# Function which remembers definitions needed for a particular Slice target
function(asterisk_scf_slice_compile_definitions SLICE_FILE)
- get_filename_component(SLICE ${SLICE_FILE} NAME_WE)
- set(SLICE_COMPILE_DEFINITIONS_${SLICE} ${ARGN} PARENT_SCOPE)
+ get_filename_component(SLICE ${SLICE_FILE} NAME_WE)
+ set(SLICE_COMPILE_DEFINITIONS_${SLICE} ${ARGN} PARENT_SCOPE)
endfunction()
# Function which remembers Ice libraries needed by a Slice target
function(asterisk_scf_slice_add_ice_libraries TARGET)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one library to this function")
- endif()
- set(libs ${${TARGET}_ICE_LIBRARIES})
- foreach(lib ${ARGN})
- foreach(lang ${ASTERISK_SCF_PROJECT_LANGUAGES})
- if(lang STREQUAL "Java")
- find_ICE_Java_library(${lib})
- elseif(lang STREQUAL "CSharp")
- find_ICE_CSharp_library(${lib})
- elseif(lang STREQUAL "CXX")
- find_ICE_CXX_library(${lib})
- endif()
- endforeach()
- list(APPEND libs ${lib})
- endforeach()
- list(REMOVE_DUPLICATES libs)
- set(${TARGET}_ICE_LIBRARIES ${libs} PARENT_SCOPE)
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one library to this function")
+ endif()
+ set(libs ${${TARGET}_ICE_LIBRARIES})
+ foreach(lib ${ARGN})
+ find_ICE_library(${lib})
+ list(APPEND libs ${lib})
+ endforeach()
+ list(REMOVE_DUPLICATES libs)
+ set(${TARGET}_ICE_LIBRARIES ${libs} PARENT_SCOPE)
endfunction()
# Function which adds a dependency for a Slice definition
function(asterisk_scf_slice_add_dependencies TARGET)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one dependency to this function")
- endif()
- foreach(l ${ASTERISK_SCF_PROJECT_LANGUAGES})
- foreach(d ${ARGN})
- message(STATUS "Adding dependency on slice definition ${d} to ${TARGET} for ${l} language")
- add_dependencies(${TARGET}_${l} ${d}_${l})
- endforeach()
- endforeach()
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one dependency to this function")
+ endif()
+ foreach(d ${ARGN})
+ message(STATUS "Adding dependency on slice definition ${d} to ${TARGET}")
+ add_dependencies(${TARGET}_${l} ${d}_${l})
+ endforeach()
endfunction()
-# Function which compiles one or more Slice definition files;
-# the file(s) are compiled for all languages in use in the project
+# Function which compiles one or more Slice definition files
#
# Syntax:
# asterisk_scf_compile_slice(<target> [SOURCES source1 ... sourceN])
@@ -481,519 +414,443 @@ endfunction()
# source files. The '.ice' extension must be included. Source file
# names can be glob patterns.
#
-# sets these variables (where SLICE is the target name computed
-# as above and LANG is each language used in the project):
+# sets these variables (where SLICE is the target name computed):
#
-# ASTERISK_SCF_SLICE_${SLICE}_${LANG}
-# marker indicating this Slice has been built for the language
-# ASTERISK_SCF_SLICE_${SLICE}_CXX_INCLUDE_DIRS
+# ASTERISK_SCF_SLICE_${SLICE}
+# marker indicating this Slice has been built
+# ASTERISK_SCF_SLICE_${SLICE}_INCLUDE_DIRS
# directories where generated header files needed for this target live
-# (only for C++)
function(asterisk_scf_compile_slice TARGET_IN DIR_IN DESC_IN GROUP_IN)
- if(ARGN)
- foreach(arg ${ARGN})
- if(NOT source_mode)
- if(arg STREQUAL "SOURCES")
- set(source_mode true)
- else()
- message(FATAL_ERROR "Unsupported argument '${arg}' passed to asterisk_scf_compile_slice")
- endif()
- else()
- list(APPEND inputs "${arg}")
- endif()
- endforeach()
- set(TARGET "${TARGET_IN}")
- else()
- set(slice_files "${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_IN}")
- get_filename_component(file "${TARGET_IN}" NAME_WE)
- set(TARGET "${file}")
- endif()
-
- # Now that we have the list of inputs, convert any of them
- # that are glob-patterns into the list of files that match
- if(source_mode)
- foreach(input ${inputs})
- if(IS_ABSOLUTE "${input}")
- file(GLOB globbed "${input}")
- else()
- file(GLOB globbed "${CMAKE_CURRENT_SOURCE_DIR}/${input}")
- endif()
- if(globbed)
- foreach (glob ${globbed})
- file(TO_CMAKE_PATH "${glob}" cmake_path)
- if(glob MATCHES "\\.ice$")
- list(APPEND slice_files "${cmake_path}")
- endif()
- if(glob MATCHES "\\.h$")
- list(APPEND cpp_header_files "${cmake_path}")
- endif()
- if(glob MATCHES "\\.cpp$")
- list(APPEND cpp_source_files "${cmake_path}")
- endif()
- endforeach()
- else()
- if(input MATCHES "\\.ice$")
- list(APPEND slice_files "${input}")
- endif()
- endif()
- endforeach()
- endif()
-
- # This makes the Slice definitions display in their own folder in the IDE,
- # specifically Visual Studio
- source_group("Slice Definitions" REGULAR_EXPRESSION "\\.ice$")
-
- # Append the needed include directories for Slice definitions
- # (global and the ones stored for this target)
- if(ICE_SLICE_DIR)
- list(APPEND slice_compiler_arguments "-I${ICE_SLICE_DIR}")
- endif()
- foreach(include ${SLICE_INCLUDE_DIRECTORIES})
- # Each directory in this list will be in the source tree,
- # which is what the Slice compiler will need
- list(APPEND slice_compiler_arguments "-I${include}")
- # If there are any CXX targets that depend on this target,
- # they'll need a path to the *parallel* directory in the build
- # tree where the Slice compiler will have generated the
- # header file(s) for the Slice definitions in the source tree
- # but only if the Slice include path is actually part of the
- # source tree... if it's not, it is assumed that the relevant
- # header files live in the same directory as the Slice files
- file(RELATIVE_PATH relpath "${CMAKE_SOURCE_DIR}" "${include}")
- if(relpath MATCHES "^../")
- # The directory is not located in the source tree, so use the
- # original path
- list(APPEND target_CXX_includes "${include}")
- else()
- # The directory is located in the source tree, so use the
- # parallel path in the build tree
- list(APPEND target_CXX_includes "${CMAKE_BINARY_DIR}/${relpath}")
- endif()
+ if(ARGN)
+ foreach(arg ${ARGN})
+ if(NOT source_mode)
+ if(arg STREQUAL "SOURCES")
+ set(source_mode true)
+ else()
+ message(FATAL_ERROR "Unsupported argument '${arg}' passed to asterisk_scf_compile_slice")
+ endif()
+ else()
+ list(APPEND inputs "${arg}")
+ endif()
endforeach()
-
- # Append any definitions stored for this target
- foreach(SLICEDEF ${SLICE_COMPILE_DEFINITIONS_${TARGET}})
- list(APPEND slice_compiler_arguments "-D${SLICEDEF}")
+ set(TARGET "${TARGET_IN}")
+ else()
+ set(slice_files "${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_IN}")
+ get_filename_component(file "${TARGET_IN}" NAME_WE)
+ set(TARGET "${file}")
+ endif()
+
+ # Now that we have the list of inputs, convert any of them
+ # that are glob-patterns into the list of files that match
+ if(source_mode)
+ foreach(input ${inputs})
+ if(IS_ABSOLUTE "${input}")
+ file(GLOB globbed "${input}")
+ else()
+ file(GLOB globbed "${CMAKE_CURRENT_SOURCE_DIR}/${input}")
+ endif()
+ if(globbed)
+ foreach (glob ${globbed})
+ file(TO_CMAKE_PATH "${glob}" cmake_path)
+ if(glob MATCHES "\\.ice$")
+ list(APPEND slice_files "${cmake_path}")
+ endif()
+ if(glob MATCHES "\\.h$")
+ list(APPEND cpp_header_files "${cmake_path}")
+ endif()
+ if(glob MATCHES "\\.cpp$")
+ list(APPEND cpp_source_files "${cmake_path}")
+ endif()
+ endforeach()
+ else()
+ if(input MATCHES "\\.ice$")
+ list(APPEND slice_files "${input}")
+ endif()
+ endif()
endforeach()
- list(REMOVE_DUPLICATES slice_compiler_arguments)
-
- foreach(file ${slice_files})
- file(RELATIVE_PATH relpath "${CMAKE_SOURCE_DIR}" "${file}")
- string(REPLACE "/" "_" file_variable ${relpath})
- set_cache_var(TARGET_${file_variable} ${TARGET})
+ endif()
+
+ # This makes the Slice definitions display in their own folder in the IDE,
+ # specifically Visual Studio
+ source_group("Slice Definitions" REGULAR_EXPRESSION "\\.ice$")
+
+ # Append the needed include directories for Slice definitions
+ # (global and the ones stored for this target)
+ if(ICE_SLICE_DIR)
+ list(APPEND slice_compiler_arguments "-I${ICE_SLICE_DIR}")
+ endif()
+ foreach(include ${SLICE_INCLUDE_DIRECTORIES})
+ # Each directory in this list will be in the source tree,
+ # which is what the Slice compiler will need
+ list(APPEND slice_compiler_arguments "-I${include}")
+ # If there are any CXX targets that depend on this target,
+ # they'll need a path to the *parallel* directory in the build
+ # tree where the Slice compiler will have generated the
+ # header file(s) for the Slice definitions in the source tree
+ # but only if the Slice include path is actually part of the
+ # source tree... if it's not, it is assumed that the relevant
+ # header files live in the same directory as the Slice files
+ file(RELATIVE_PATH relpath "${CMAKE_SOURCE_DIR}" "${include}")
+ if(relpath MATCHES "^../")
+ # The directory is not located in the source tree, so use the
+ # original path
+ list(APPEND target_includes "${include}")
+ else()
+ # The directory is located in the source tree, so use the
+ # parallel path in the build tree
+ list(APPEND target_includes "${CMAKE_BINARY_DIR}/${relpath}")
+ endif()
+ endforeach()
+
+ # Append any definitions stored for this target
+ foreach(SLICEDEF ${SLICE_COMPILE_DEFINITIONS_${TARGET}})
+ list(APPEND slice_compiler_arguments "-D${SLICEDEF}")
+ endforeach()
+ list(REMOVE_DUPLICATES slice_compiler_arguments)
+
+ foreach(file ${slice_files})
+ file(RELATIVE_PATH relpath "${CMAKE_SOURCE_DIR}" "${file}")
+ string(REPLACE "/" "_" file_variable ${relpath})
+ set_cache_var(TARGET_${file_variable} ${TARGET})
+ endforeach()
+
+ message(STATUS "Building Slice target ${TARGET} as a library")
+ set(suffixes cpp h)
+ include_directories("${CMAKE_CURRENT_BINARY_DIR}")
+
+ if(NOT SLICE_COMPILER)
+ # Find the actual Slice compiler
+ find_program(SLICE_COMPILER slice2cpp PATHS "${ICE_DIR}/bin" NO_DEFAULT_PATH)
+
+ # If we fail to find it we have to abort here, we can go no further
+ if(SLICE_COMPILER)
+ message(STATUS "Found Slice compiler at ${SLICE_COMPILER}")
+ else()
+ message(FATAL_ERROR "Failed to find Slice compiler")
+ endif()
+ endif()
+
+ # Look for the dependencies for this slice definition, we have to do it now since the target was just added
+ message(STATUS "Determining dependencies for Slice target ${TARGET}")
+ execute_process(COMMAND ${SLICE_COMPILER} ${slice_compiler_arguments}
+ --depend ${slice_files} OUTPUT_VARIABLE raw_dependencies
+ ERROR_VARIABLE slice_errors)
+ if(slice_errors)
+ message(FATAL_ERROR "Slice compiler produced errors:\n ${slice_errors}")
+ endif()
+
+ if(raw_dependencies)
+ # The next block of stuff sanitizes the output we got from the slice compiler into a non-Makefile specific foo
+ # Get rid of all the \ characters
+ string(REPLACE "\\" "" raw_dependencies "${raw_dependencies}")
+ # Turn the newlines into CMake list item separators, since the compiler spits out one dependency per line
+ string(REPLACE "\n" ";" raw_dependencies "${raw_dependencies}")
+ string(REPLACE " ;" ";" raw_dependencies "${raw_dependencies}")
+ string(REPLACE "; " ";" raw_dependencies "${raw_dependencies}")
+
+ foreach(dep ${raw_dependencies})
+ # If the name ends with a colon, it's actually a Makefile target name and should be
+ # skipped
+ if(NOT dep MATCHES ":$")
+ # Convert the path into a cmake one so we can absolutely get the filename
+ file(TO_CMAKE_PATH ${dep} dep)
+ file(RELATIVE_PATH relpath "${CMAKE_SOURCE_DIR}" "${dep}")
+ string(REPLACE "/" "_" file_variable "${relpath}")
+ set(dep_target ${TARGET_${file_variable}})
+ if(dep_target)
+ # If this is not already us add it as a dependency
+ if(NOT dep_target STREQUAL ${TARGET})
+ message(STATUS "Auto-adding dependency on Slice target ${dep_target} to ${TARGET}")
+ list(APPEND source_dependencies ${dep})
+ list(APPEND target_dependencies ${dep_target})
+ list(APPEND target_includes ${ASTERISK_SCF_SLICE_${dep_target}_INCLUDE_DIRS})
+ endif()
+ else()
+ # Remember sources that are not associated with targets too
+ message(STATUS "Auto-adding dependency on Slice source ${dep} to ${TARGET}")
+ list(APPEND source_dependencies ${dep})
+ endif()
+ endif()
endforeach()
+ endif()
- foreach(lang ${ASTERISK_SCF_PROJECT_LANGUAGES})
- unset(generated_files)
- unset(target_dependencies)
- unset(source_dependencies)
- unset(raw_dependencies)
- unset(target_libs)
- unset(slice_export_arguments)
- if(lang STREQUAL "Java")
- message(STATUS "Building Slice target ${TARGET} as Java classes")
- elseif(lang STREQUAL "CSharp")
- message(STATUS "Building Slice target ${TARGET} as a CSharp assembly")
- set(compiler slice2cs)
- set(suffixes cs)
- elseif(lang STREQUAL "CXX")
- message(STATUS "Building Slice target ${TARGET} as a CXX library")
- set(compiler slice2cpp)
- set(suffixes cpp h)
- include_directories("${CMAKE_CURRENT_BINARY_DIR}")
- else()
- message(FATAL_ERROR "Unsupported Slice compiled language ${lang}")
- endif()
-
- if(NOT SLICE_COMPILER_${lang})
- # Find the actual Slice compiler
- find_program(SLICE_COMPILER_${lang} ${compiler} PATHS "${ICE_DIR}/bin" NO_DEFAULT_PATH)
-
- # If we fail to find it we have to abort here, we can go no further
- if(SLICE_COMPILER_${lang})
- message(STATUS "Found Slice compiler for ${lang} at ${SLICE_COMPILER_${lang}}")
- else()
- message(FATAL_ERROR "Failed to find Slice compiler ${compiler}")
- endif()
- endif()
-
- # Look for the dependencies for this slice definition, we have to do it now since the target was just added
- message(STATUS "Determining dependencies for Slice target ${TARGET}")
- execute_process(COMMAND ${SLICE_COMPILER_${lang}} ${slice_compiler_arguments}
- --depend ${slice_files} OUTPUT_VARIABLE raw_dependencies
- ERROR_VARIABLE slice_errors)
- if(slice_errors)
- message(FATAL_ERROR "Slice compiler produced errors:\n ${slice_errors}")
- endif()
-
- if(raw_dependencies)
- # The next block of stuff sanitizes the output we got from the slice compiler into a non-Makefile specific foo
- # Get rid of all the \ characters
- string(REPLACE "\\" "" raw_dependencies "${raw_dependencies}")
- # Turn the newlines into CMake list item separators, since the compiler spits out one dependency per line
- string(REPLACE "\n" ";" raw_dependencies "${raw_dependencies}")
- string(REPLACE " ;" ";" raw_dependencies "${raw_dependencies}")
- string(REPLACE "; " ";" raw_dependencies "${raw_dependencies}")
-
- foreach(dep ${raw_dependencies})
- # If the name ends with a colon, it's actually a Makefile target name and should be
- # skipped
- if(NOT dep MATCHES ":$")
- # Convert the path into a cmake one so we can absolutely get the filename
- file(TO_CMAKE_PATH ${dep} dep)
- file(RELATIVE_PATH relpath "${CMAKE_SOURCE_DIR}" "${dep}")
- string(REPLACE "/" "_" file_variable "${relpath}")
- set(dep_target ${TARGET_${file_variable}})
- if(dep_target)
- # If this is not already us add it as a dependency
- if(NOT dep_target STREQUAL ${TARGET})
- message(STATUS "Auto-adding dependency on Slice target ${dep_target} to ${TARGET} for ${lang} language")
- list(APPEND source_dependencies ${dep})
- list(APPEND target_dependencies ${dep_target}_${lang})
- list(APPEND target_CXX_includes ${ASTERISK_SCF_SLICE_${dep_target}_CXX_INCLUDE_DIRS})
- endif()
- else()
- # Remember sources that are not associated with targets too
- message(STATUS "Auto-adding dependency on Slice source ${dep} to ${TARGET} for ${lang} language")
- list(APPEND source_dependencies ${dep})
- endif()
- endif()
- endforeach()
- endif()
-
- foreach(file ${slice_files})
- foreach(suffix ${suffixes})
- get_filename_component(source "${file}" NAME_WE)
- list(APPEND generated_files "${CMAKE_CURRENT_BINARY_DIR}/${source}.${suffix}")
- endforeach()
- endforeach()
-
- set_source_files_properties(${generated_files} PROPERTIES GENERATED 1)
-
- # create a preprocessor definition in the generated CXX files that enables
- # the generated classes to be exported from the library (only necessary on Windows)
- # the definition for a target named 'FOO' will be 'FOO_CXX_EXPORTS', and if this
- # preprocessor macro is defined, then the Slice-generated classes will be marked
- # with 'dllexport'. add_library() (used below) automatically generates a definition
- # for the appropriately-named macro when the library is built in SHARED mode.
- if(WIN32 AND lang STREQUAL "CXX")
- list(APPEND slice_export_arguments "--dll-export" "${TARGET}_${lang}")
- endif()
-
- add_custom_command(
- OUTPUT ${generated_files}
- COMMAND ${SLICE_COMPILER_${lang}} ${slice_compiler_arguments} ${slice_export_arguments} ${slice_files}
- COMMENT "Building ${TARGET} from ${slice_files} using ${compiler}"
- DEPENDS ${slice_files} ${source_dependencies}
- )
-
- if(target_CXX_includes)
- list(REMOVE_DUPLICATES target_CXX_includes)
- endif()
-
- if(lang STREQUAL "Java")
- elseif(lang STREQUAL "CSharp")
- # Note that slice_files are included as sources here even though they won't be compiled
- # by the actual compiler; this is to get them to show up as sources in the project
- # created for this target
- foreach(lib ${${TARGET}_ICE_LIBRARIES} ${ASTERISK_SCF_ICE_LIBRARIES_${lang}})
- if(UNIX)
- list(APPEND target_libs "${lib}")
- else()
- list(APPEND target_libs "${ICE_${lang}_LIB_${lib}}")
- endif()
- endforeach()
- csharp_add_library(${TARGET}_${lang} ${generated_files} ${slice_files}
- REFERENCES "${ICE_CSharp_LIB_Ice}" ${target_libs} ${target_dependencies})
- elseif(lang STREQUAL "CXX")
- # Note that slice_files are included as sources here even though they won't be compiled
- # by the actual compiler; this is to get them to show up as sources in the project
- # created for this target
- include_directories(${target_CXX_includes})
- # If there are any non-generated header files required for this Slice target, copy
- # them to the binary directory where they will be needed later. The destination
- # path to file() defaults to the binary directory, so there is no need to
- # re-specify it here.
- if(cpp_header_files)
- file(COPY ${cpp_header_files} DESTINATION .)
- endif()
- add_library(${TARGET}_${lang} ${generated_files} ${slice_files} ${cpp_source_files})
- install(TARGETS ${TARGET}_${lang} DESTINATION ${DIR_IN} COMPONENT ${TARGET}_${lang})
- if(ASTERISKSCF_CPACK)
- # Adds a component to the packager. The first arg must have been previously defined
- # as a COMPONENT arg to install.
- cpack_add_component(${TARGET}_${lang} DESCRIPTION ${DESC_IN} GROUP ${GROUP_IN})
- endif()
- foreach(lib ${${TARGET}_ICE_LIBRARIES} ${ASTERISK_SCF_ICE_LIBRARIES_${lang}})
- if(UNIX)
- list(APPEND target_libs "${lib}")
- else()
- list(APPEND target_libs "${ICE_${lang}_LIB_${lib}}")
- endif()
- endforeach()
- if(target_libs)
- target_link_libraries(${TARGET}_${lang} ${target_libs})
- endif()
- if(APPLE)
- target_link_libraries(${TARGET}_${lang} ${ICE_CXX_LIB_IceUtil})
- target_link_libraries(${TARGET}_${lang} ${ICE_CXX_LIB_ZeroCIce})
- endif()
- if(target_dependencies)
- message(STATUS "Linking ${TARGET}_${lang} to ${target_dependencies}")
- target_link_libraries(${TARGET}_${lang} ${target_dependencies})
- add_dependencies(${TARGET}_${lang} ${target_dependencies})
- endif()
- if(UNIX)
- set_target_properties(${TARGET}_${lang} PROPERTIES COMPILE_FLAGS "-fPIC")
- endif()
- set_cache_var(ASTERISK_SCF_SLICE_${TARGET}_CXX_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${target_CXX_includes})
- endif()
- set_cache_var(ASTERISK_SCF_SLICE_${TARGET}_${lang} Bob)
+ foreach(file ${slice_files})
+ foreach(suffix ${suffixes})
+ get_filename_component(source "${file}" NAME_WE)
+ list(APPEND generated_files "${CMAKE_CURRENT_BINARY_DIR}/${source}.${suffix}")
endforeach()
+ endforeach()
+
+ set_source_files_properties(${generated_files} PROPERTIES GENERATED 1)
+
+ # create a preprocessor definition in the generated CXX files that enables
+ # the generated classes to be exported from the library (only necessary on Windows)
+ # the definition for a target named 'FOO' will be 'FOO_EXPORTS', and if this
+ # preprocessor macro is defined, then the Slice-generated classes will be marked
+ # with 'dllexport'. add_library() (used below) automatically generates a definition
+ # for the appropriately-named macro when the library is built in SHARED mode.
+ if(WIN32)
+ list(APPEND slice_export_arguments "--dll-export" "${TARGET}")
+ endif()
+
+ add_custom_command(
+ OUTPUT ${generated_files}
+ COMMAND ${SLICE_COMPILER} ${slice_compiler_arguments} ${slice_export_arguments} ${slice_files}
+ COMMENT "Building ${TARGET} from ${slice_files} using slice2cpp"
+ DEPENDS ${slice_files} ${source_dependencies}
+ )
+
+ if(target_includes)
+ list(REMOVE_DUPLICATES target_includes)
+ endif()
+
+ # Note that slice_files are included as sources here even though they won't be compiled
+ # by the actual compiler; this is to get them to show up as sources in the project
+ # created for this target
+ include_directories(${target_includes})
+ # If there are any non-generated header files required for this Slice target, copy
+ # them to the binary directory where they will be needed later. The destination
+ # path to file() defaults to the binary directory, so there is no need to
+ # re-specify it here.
+ if(cpp_header_files)
+ file(COPY ${cpp_header_files} DESTINATION .)
+ endif()
+ add_library(${TARGET} ${generated_files} ${slice_files} ${cpp_source_files})
+ install(TARGETS ${TARGET} DESTINATION ${DIR_IN} COMPONENT ${TARGET})
+ if(ASTERISKSCF_CPACK)
+ # Adds a component to the packager. The first arg must have been previously defined
+ # as a COMPONENT arg to install.
+ cpack_add_component(${TARGET} DESCRIPTION ${DESC_IN} GROUP ${GROUP_IN})
+ endif()
+ foreach(lib ${${TARGET}_ICE_LIBRARIES} ${ASTERISK_SCF_ICE_LIBRARIES})
+ if(UNIX)
+ list(APPEND target_libs "${lib}")
+ else()
+ list(APPEND target_libs "${ICE_LIB_${lib}}")
+ endif()
+ endforeach()
+ if(target_libs)
+ target_link_libraries(${TARGET} ${target_libs})
+ endif()
+ if(APPLE)
+ target_link_libraries(${TARGET} ${ICE_LIB_IceUtil})
+ target_link_libraries(${TARGET} ${ICE_LIB_ZeroCIce})
+ endif()
+ if(target_dependencies)
+ message(STATUS "Linking ${TARGET} to ${target_dependencies}")
+ target_link_libraries(${TARGET} ${target_dependencies})
+ add_dependencies(${TARGET} ${target_dependencies})
+ endif()
+ if(UNIX)
+ set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS "-fPIC")
+ endif()
+ set_cache_var(ASTERISK_SCF_SLICE_${TARGET}_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${target_includes})
+ set_cache_var(ASTERISK_SCF_SLICE_${TARGET} Bob)
endfunction()
# Function which initializes a component for building
-function(asterisk_scf_component_init COMPONENT LANG)
- message(STATUS "Setting up to build component ${COMPONENT}")
- set(ASTERISK_SCF_${COMPONENT}_LANG ${LANG} PARENT_SCOPE)
+function(asterisk_scf_component_init COMPONENT)
+ message(STATUS "Setting up to build component ${COMPONENT}")
+ set(ASTERISK_SCF_${COMPONENT} Bob PARENT_SCOPE)
endfunction()
# Function which adds the compiled Slice targets to a component to be built
function(asterisk_scf_component_add_slice COMPONENT)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one Slice target to this function")
- endif()
- if(NOT ASTERISK_SCF_${COMPONENT}_LANG)
- message(FATAL_ERROR "Must call asterisk_scf_component_init for component ${COMPONENT} before asterisk_scf_component_add_slice")
- endif()
- set(slice_list ${${COMPONENT}_SLICES})
- foreach(slice ${ARGN})
- get_filename_component(f ${slice} NAME_WE)
- if(NOT ASTERISK_SCF_SLICE_${f}_${ASTERISK_SCF_${COMPONENT}_LANG})
- message(FATAL_ERROR "Must call asterisk_scf_compile_slice for ${f} before asterisk_scf_component_add_slice")
- endif()
- message(STATUS "Adding Slice ${f} to component ${COMPONENT}")
- list(APPEND slice_list ${f}_${ASTERISK_SCF_${COMPONENT}_LANG})
- if(ASTERISK_SCF_${COMPONENT}_LANG STREQUAL "CXX")
- list(APPEND include_dirs ${ASTERISK_SCF_SLICE_${slice}_CXX_INCLUDE_DIRS})
- endif()
- endforeach()
- list(REMOVE_DUPLICATES slice_list)
- set(${COMPONENT}_SLICES ${slice_list} PARENT_SCOPE)
- if(include_dirs)
- list(REMOVE_DUPLICATES include_dirs)
- include_directories(${include_dirs})
- endif()
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one Slice target to this function")
+ endif()
+ if(NOT ASTERISK_SCF_${COMPONENT})
+ message(FATAL_ERROR "Must call asterisk_scf_component_init for component ${COMPONENT} before asterisk_scf_component_add_slice")
+ endif()
+ set(slice_list ${${COMPONENT}_SLICES})
+ foreach(slice ${ARGN})
+ get_filename_component(f ${slice} NAME_WE)
+ if(NOT ASTERISK_SCF_SLICE_${f})
+ message(FATAL_ERROR "Must call asterisk_scf_compile_slice for ${f} before asterisk_scf_component_add_slice")
+ endif()
+ message(STATUS "Adding Slice ${f} to component ${COMPONENT}")
+ list(APPEND slice_list ${f})
+ list(APPEND include_dirs ${ASTERISK_SCF_SLICE_${slice}_INCLUDE_DIRS})
+ endforeach()
+ list(REMOVE_DUPLICATES slice_list)
+ set(${COMPONENT}_SLICES ${slice_list} PARENT_SCOPE)
+ if(include_dirs)
+ list(REMOVE_DUPLICATES include_dirs)
+ include_directories(${include_dirs})
+ endif()
endfunction()
# Function which adds source or header files to a component to be built
function(asterisk_scf_component_add_file COMPONENT)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one source file to this function")
- endif()
- message(STATUS "Adding ${ARGN} to component ${COMPONENT}")
- set(file_list ${${COMPONENT}_SOURCES})
- foreach(file ${ARGN})
- list(APPEND file_list ${CMAKE_CURRENT_SOURCE_DIR}/${file})
- endforeach()
- list(REMOVE_DUPLICATES file_list)
- set(${COMPONENT}_SOURCES ${file_list} PARENT_SCOPE)
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one source file to this function")
+ endif()
+ message(STATUS "Adding ${ARGN} to component ${COMPONENT}")
+ set(file_list ${${COMPONENT}_SOURCES})
+ foreach(file ${ARGN})
+ list(APPEND file_list ${CMAKE_CURRENT_SOURCE_DIR}/${file})
+ endforeach()
+ list(REMOVE_DUPLICATES file_list)
+ set(${COMPONENT}_SOURCES ${file_list} PARENT_SCOPE)
endfunction()
# Function which adds Ice libraries needed by a component
function(asterisk_scf_component_add_ice_libraries COMPONENT)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one library to this function")
- endif()
- set(libs ${${COMPONENT}_ICE_LIBRARIES})
- foreach(lib ${ARGN})
- set(lang ${ASTERISK_SCF_${COMPONENT}_LANG})
- if(lang STREQUAL "Java")
- find_ICE_Java_library(${lib})
- elseif(lang STREQUAL "CSharp")
- find_ICE_CSharp_library(${lib})
- elseif(lang STREQUAL "CXX")
- find_ICE_CXX_library(${lib})
- endif()
- list(APPEND libs ${lib})
- endforeach()
- list(REMOVE_DUPLICATES libs)
- set(${COMPONENT}_ICE_LIBRARIES ${libs} PARENT_SCOPE)
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one library to this function")
+ endif()
+ set(libs ${${COMPONENT}_ICE_LIBRARIES})
+ foreach(lib ${ARGN})
+ find_ICE_library(${lib})
+ list(APPEND libs ${lib})
+ endforeach()
+ list(REMOVE_DUPLICATES libs)
+ set(${COMPONENT}_ICE_LIBRARIES ${libs} PARENT_SCOPE)
endfunction()
# Function which adds Boost libraries needed by a component
function(asterisk_scf_component_add_boost_libraries COMPONENT)
- if(NOT ARGN)
- message(FATAL_ERROR "You must pass at least one library to this function")
- endif()
- set(libs ${${COMPONENT}_BOOST_LIBRARIES})
- # By default we are disabling boost auto-linking and specifying dynamic linking.
- add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_ALL_DYN_LINK)
- foreach(lib ${ARGN})
- set(lang ${ASTERISK_SCF_${COMPONENT}_LANG})
- if(lang STREQUAL "CXX")
- else()
- message(FATAL_ERROR "Boost libraries cannot be used with components in the ${lang} language")
- endif()
- find_Boost_library(${lib})
- list(APPEND libs ${lib})
- endforeach()
- list(REMOVE_DUPLICATES libs)
- set(${COMPONENT}_BOOST_LIBRARIES ${libs} PARENT_SCOPE)
- include_directories(${Boost_INCLUDE_DIR})
- link_directories(${Boost_LIBRARY_DIRS})
+ if(NOT ARGN)
+ message(FATAL_ERROR "You must pass at least one library to this function")
+ endif()
+ set(libs ${${COMPONENT}_BOOST_LIBRARIES})
+ # By default we are disabling boost auto-linking and specifying dynamic linking.
+ add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_ALL_DYN_LINK)
+ foreach(lib ${ARGN})
+ find_Boost_library(${lib})
+ list(APPEND libs ${lib})
+ endforeach()
+ list(REMOVE_DUPLICATES libs)
+ set(${COMPONENT}_BOOST_LIBRARIES ${libs} PARENT_SCOPE)
+ include_directories(${Boost_INCLUDE_DIR})
+ link_directories(${Boost_LIBRARY_DIRS})
endfunction()
# Function which builds a component as an IceBox service
function(asterisk_scf_component_build_icebox COMPONENT)
- set(lang ${ASTERISK_SCF_${COMPONENT}_LANG})
- message(STATUS "Building component ${COMPONENT} (${lang}) as IceBox service")
- if(lang STREQUAL "CXX")
- find_ICE_CXX_library(IceBox)
- elseif(lang STREQUAL "CSharp")
- find_ICE_CSharp_library(IceBox)
- elseif(lang STREQUAL "Java")
- find_ICE_Java_library(IceBox)
+ message(STATUS "Building component ${COMPONENT} as an IceBox service")
+ find_ICE_library(IceBox)
+ list(APPEND icelibs IceBox ${ASTERISK_SCF_ICE_LIBRARIES} ${${COMPONENT}_ICE_LIBRARIES})
+ list(REMOVE_DUPLICATES icelibs)
+ foreach(lib ${icelibs})
+ if(UNIX)
+ list(APPEND target_libs "${lib}")
else()
- message(FATAL_ERROR "IceBox services are not supported in the ${lang} language")
- endif()
- list(APPEND icelibs IceBox ${ASTERISK_SCF_ICE_LIBRARIES_${lang}} ${${COMPONENT}_ICE_LIBRARIES})
- list(REMOVE_DUPLICATES icelibs)
- foreach(lib ${icelibs})
- if(UNIX)
- list(APPEND target_libs "${lib}")
- else()
- list(APPEND target_libs "${ICE_${lang}_LIB_${lib}}")
- endif()
+ list(APPEND target_libs "${ICE_LIB_${lib}}")
+ endif()
+ endforeach()
+
+ # Now we actually create the library
+ # while one would think that MODULE would be the right setting, it
+ # has to be shared due to how icebox finds these libraries on a Mac
+ # (it loads .dylib instead of loading .so)
+ add_library(${COMPONENT} SHARED ${${COMPONENT}_SOURCES})
+ # Link required libraries and Slice libraries
+ list(APPEND boostlibs ${ASTERISK_SCF_BOOST_LIBRARIES} ${${COMPONENT}_BOOST_LIBRARIES})
+ if(boostlibs)
+ list(REMOVE_DUPLICATES boostlibs)
+ foreach(lib ${boostlibs})
+ string(TOUPPER ${lib} libtag)
+ list(APPEND target_libs "${Boost_${libtag}_LIBRARY}")
endforeach()
-
- if(lang STREQUAL "CXX")
- # Now we actually create the library
- # while one would think that MODULE would be the right setting, it
- # has to be shared due to how icebox finds these libraries on a Mac
- # (it loads .dylib instead of loading .so)
- add_library(${COMPONENT} SHARED ${${COMPONENT}_SOURCES})
- # Link required libraries and Slice libraries
- list(APPEND boostlibs ${ASTERISK_SCF_BOOST_LIBRARIES} ${${COMPONENT}_BOOST_LIBRARIES})
- if(boostlibs)
- list(REMOVE_DUPLICATES boostlibs)
- foreach(lib ${boostlibs})
- string(TOUPPER ${lib} libtag)
- list(APPEND target_libs "${Boost_${libtag}_LIBRARY}")
- endforeach()
- endif()
- if(UNIX)
- list(FIND target_libs Ice _Ice_FOUND)
- if(_Ice_FOUND GREATER -1)
- list(APPEND target_libs "IceUtil")
- list(APPEND target_libs "pthread")
- endif()
- endif()
- target_link_libraries(${COMPONENT} ${${COMPONENT}_SLICES} ${target_libs})
- elseif(lang STREQUAL "CSharp")
- csharp_add_library(${COMPONENT} ${${COMPONENT}_SOURCES} REFERENCES ${${COMPONENT}_SLICES} ${target_libs})
- endif()
+ endif()
+ if(UNIX)
+ list(FIND target_libs Ice _Ice_FOUND)
+ if(_Ice_FOUND GREATER -1)
+ list(APPEND target_libs "IceUtil")
+ list(APPEND target_libs "pthread")
+ endif()
+ endif()
+ target_link_libraries(${COMPONENT} ${${COMPONENT}_SLICES} ${target_libs})
endfunction()
# Function which builds a component standalone
function(asterisk_scf_component_build_standalone COMPONENT)
- set(lang ${ASTERISK_SCF_${COMPONENT}_LANG})
- message(STATUS "Building component ${COMPONENT} (${lang}) as standalone executable")
- list(APPEND icelibs ${ASTERISK_SCF_ICE_LIBRARIES_${lang}} ${${COMPONENT}_ICE_LIBRARIES})
- list(REMOVE_DUPLICATES icelibs)
- foreach(lib ${icelibs})
- if(UNIX)
- list(APPEND target_libs "${lib}")
- else()
- list(APPEND target_libs "${ICE_${lang}_LIB_${lib}}")
- endif()
+ message(STATUS "Building component ${COMPONENT} as a standalone executable")
+ list(APPEND icelibs ${ASTERISK_SCF_ICE_LIBRARIES} ${${COMPONENT}_ICE_LIBRARIES})
+ list(REMOVE_DUPLICATES icelibs)
+ foreach(lib ${icelibs})
+ if(UNIX)
+ list(APPEND target_libs "${lib}")
+ else()
+ list(APPEND target_libs "${ICE_LIB_${lib}}")
+ endif()
+ endforeach()
+
+ # Now we actually create the component
+ add_executable(${COMPONENT} ${${COMPONENT}_SOURCES})
+ # Link required libraries and Slice libraries
+ list(APPEND boostlibs ${ASTERISK_SCF_BOOST_LIBRARIES} ${${COMPONENT}_BOOST_LIBRARIES})
+ if(boostlibs)
+ list(REMOVE_DUPLICATES boostlibs)
+ foreach(lib ${boostlibs})
+ string(TOUPPER ${lib} libtag)
+ list(APPEND target_libs "${Boost_${libtag}_LIBRARY}")
endforeach()
-
- if(lang STREQUAL "CXX")
- # Now we actually create the component
- add_executable(${COMPONENT} ${${COMPONENT}_SOURCES})
- # Link required libraries and Slice libraries
- list(APPEND boostlibs ${ASTERISK_SCF_BOOST_LIBRARIES} ${${COMPONENT}_BOOST_LIBRARIES})
- if(boostlibs)
- list(REMOVE_DUPLICATES boostlibs)
- foreach(lib ${boostlibs})
- string(TOUPPER ${lib} libtag)
- list(APPEND target_libs "${Boost_${libtag}_LIBRARY}")
- endforeach()
- endif()
- if(UNIX)
- list(FIND target_libs Ice _Ice_FOUND)
- if(_Ice_FOUND GREATER -1)
- list(APPEND target_libs "IceUtil")
- list(APPEND target_libs "pthread")
- endif()
- endif()
- target_link_libraries(${COMPONENT} ${${COMPONENT}_SLICES} ${target_libs})
- elseif(lang STREQUAL "CSharp")
- csharp_add_executable(${COMPONENT} ${${COMPONENT}_SOURCES} REFERENCES ${${COMPONENT}_SLICES} ${target_libs})
- endif()
+ endif()
+ if(UNIX)
+ list(FIND target_libs Ice _Ice_FOUND)
+ if(_Ice_FOUND GREATER -1)
+ list(APPEND target_libs "IceUtil")
+ list(APPEND target_libs "pthread")
+ endif()
+ endif()
+ target_link_libraries(${COMPONENT} ${${COMPONENT}_SLICES} ${target_libs})
endfunction()
function(asterisk_scf_component_build_library COMPONENT)
- set(lang ${ASTERISK_SCF_${COMPONENT}_LANG})
- message(STATUS "Building component ${COMPONENT} (${lang}) as standalone executable")
- list(APPEND icelibs ${ASTERISK_SCF_ICE_LIBRARIES_${lang}} ${${COMPONENT}_ICE_LIBRARIES})
-
- list(LENGTH icelibs numicelibs)
- if(numicelibs GREATER 0)
- list(REMOVE_DUPLICATES icelibs)
- endif()
-
- foreach(lib ${icelibs})
- if(UNIX)
- list(APPEND target_libs "${lib}")
- else()
- list(APPEND target_libs "${ICE_${lang}_LIB_${lib}}")
- endif()
+ message(STATUS "Building component ${COMPONENT} as a library")
+ list(APPEND icelibs ${ASTERISK_SCF_ICE_LIBRARIES} ${${COMPONENT}_ICE_LIBRARIES})
+ list(LENGTH icelibs numicelibs)
+ if(numicelibs GREATER 0)
+ list(REMOVE_DUPLICATES icelibs)
+ endif()
+ foreach(lib ${icelibs})
+ if(UNIX)
+ list(APPEND target_libs "${lib}")
+ else()
+ list(APPEND target_libs "${ICE_LIB_${lib}}")
+ endif()
+ endforeach()
+
+ # Now we actually create the component
+ add_library(${COMPONENT} ${${COMPONENT}_SOURCES})
+ # Link required libraries and Slice libraries
+ list(APPEND boostlibs ${ASTERISK_SCF_BOOST_LIBRARIES} ${${COMPONENT}_BOOST_LIBRARIES})
+ if(boostlibs)
+ list(REMOVE_DUPLICATES boostlibs)
+ foreach(lib ${boostlibs})
+ string(TOUPPER ${lib} libtag)
+ list(APPEND target_libs "${Boost_${libtag}_LIBRARY}")
endforeach()
-
- if(lang STREQUAL "CXX")
- # Now we actually create the component
- add_library(${COMPONENT} ${${COMPONENT}_SOURCES})
- # Link required libraries and Slice libraries
- list(APPEND boostlibs ${ASTERISK_SCF_BOOST_LIBRARIES} ${${COMPONENT}_BOOST_LIBRARIES})
- if(boostlibs)
- list(REMOVE_DUPLICATES boostlibs)
- foreach(lib ${boostlibs})
- string(TOUPPER ${lib} libtag)
- list(APPEND target_libs "${Boost_${libtag}_LIBRARY}")
- endforeach()
- endif()
- target_link_libraries(${COMPONENT} ${${COMPONENT}_SLICES} ${target_libs})
- elseif(lang STREQUAL "CSharp")
- csharp_add_library(${COMPONENT} ${${COMPONENT}_SOURCES} REFERENCES ${${COMPONENT}_SLICES} ${target_libs})
- endif()
+ endif()
+ target_link_libraries(${COMPONENT} ${${COMPONENT}_SLICES} ${target_libs})
endfunction()
# Function which adds information for installing a component
function(asterisk_scf_component_install COMPONENTNAME TYPE DIR DESC GROUP)
- install(TARGETS ${COMPONENTNAME} ${TYPE} DESTINATION ${DIR} COMPONENT ${COMPONENTNAME} ${ARGN})
+ install(TARGETS ${COMPONENTNAME} ${TYPE} DESTINATION ${DIR} COMPONENT ${COMPONENTNAME} ${ARGN})
- if(ASTERISKSCF_CPACK)
- asterisk_scf_component_package(${COMPONENTNAME} ${DESC} ${GROUP})
- endif()
+ if(ASTERISKSCF_CPACK)
+ asterisk_scf_component_package(${COMPONENTNAME} ${DESC} ${GROUP})
+ endif()
endfunction()
# Adds a component to the packager. COMPONENTNAME must have been previously defined
# via the install command.
function(asterisk_scf_component_package COMPONENTNAME DESC GROUPNAME)
- cpack_add_component(${COMPONENTNAME} DESCRIPTION ${DESC} GROUP ${GROUP})
+ cpack_add_component(${COMPONENTNAME} DESCRIPTION ${DESC} GROUP ${GROUP})
endfunction()
# Adds a boost test executable to CTest. These executable will be run
# with 'make test' @param EXE - boost test executable. Probably built
# using asterisk_scf_component_build_standalone.
function(boost_add_test EXE)
- add_test(NAME ${EXE} COMMAND ${EXE}
- --report_sink=${CMAKE_BINARY_DIR}/${EXE}-result.xml
- --report_format=XML --report_level=detailed)
+ add_test(NAME ${EXE} COMMAND ${EXE}
+ --report_sink=${CMAKE_BINARY_DIR}/${EXE}-result.xml
+ --report_format=XML --report_level=detailed)
endfunction()
function(icebox_add_test NAME CONFIG)
- add_test(NAME ${NAME} COMMAND ${ICEBOX} --Ice.Config=${CONFIG})
+ add_test(NAME ${NAME} COMMAND ${ICEBOX} --Ice.Config=${CONFIG})
endfunction()
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index 61943e5..63feb16 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -20,14 +20,11 @@ include(CPackConfig.txt)
#
include(../AsteriskSCF_v4.cmake)
-# Note that the only valid languages for the following functions are: CXX (for C++) and CSharp (for C#)
-
# This function takes a project name as an argument and sets the project up in CMake. In addition it does
-# dependency checking and compiler configuration for all languages used in the project, so they must be included
-# as arguments as well. Finally, the major/minor version of ICE used by the project must be included for
-# proper dependency checking.
+# dependency checking and compiler configuration. The major/minor version of ICE used by the project must
+# be included for proper dependency checking.
#
-asterisk_scf_project(example 3.4 CXX)
+asterisk_scf_project(example 3.4)
# The next function calls setup components to be built. The first one (examplebox) is built as an Icebox
# service while the second (example) is built as a standalone executable.
@@ -36,11 +33,10 @@ asterisk_scf_project(example 3.4 CXX)
# and source files in other) as long as the *must* statements are followed. Failure to do so may result in
# a partially broken built environment.
-# This function takes a component name and language. It initializes core data used for keeping
+# This function takes a component name. It initializes core data used for keeping
# track of component Slice definitions, sources, and other things for a component. It *must* be
-# called before executing any other Asterisk SCF component function. This function also does dependency
-# checking unique to the language specified.
-asterisk_scf_component_init(examplebox CXX)
+# called before executing any other Asterisk SCF component function.
+asterisk_scf_component_init(examplebox)
# If you have additional third party dependencies for your component the CMake logic to find them can be
# inserted here.
@@ -61,14 +57,17 @@ asterisk_scf_slice_compile_definitions(fluxcapacitor SERVER JOSH=LEET2)
# If a Slice definition uses any Ice-provided definitions (for example, IceBox or IceStorm), then for
# some languages it is necessary to reference the Ice-provided libraries containing those definitions
# when building the target. The names of the needed libraries can be provided using this function.
+# It is not necessary to specify that IceBox is required for IceBox services, as the
+# asterisk_scf_component_build_icebox() function will handle that automatically.
+# TODO: still needed?
asterisk_scf_slice_add_ice_libraries(fluxcapacitor IceStorm)
-# This function compiles a Slice definition (or more than one) into one or more libraries, one for each
-# language used in the project. It produces a target named the same as the Slice file without the extension,
-# which can be used in calls to asterisk_scf_slice_include_directories(), asterisk_scf_slice_compile_definitions(),
+# This function compiles a Slice definition (or more than one) into a library.
+# It produces a target named the same as the Slice file without the extension, which can be used in calls to
+# asterisk_scf_slice_include_directories(), asterisk_scf_slice_compile_definitions(),
# asterisk_scf_component_add_slice(), and asterisk_scf_slice_add_ice_libraries().
# Parameters to asterisk_scf_compile_slice:
-# - The target slice definition filename.
+# - The target Slice definition filename.
# - The subdirectory in which to install the output of the build. "lib" is good for most cases, but some
# optional components may choose to install elsewhere.
# - Description for use by the packager. This text typically appears when the user hovers over the component's name
@@ -85,13 +84,6 @@ asterisk_scf_component_add_slice(examplebox fluxcapacitor)
# compiled into the component. This *must* be called from the same directory that the source file exists in.
asterisk_scf_component_add_file(examplebox example.cpp)
-# If a component uses any Ice-provided definitions (for example, IceBox or IceStorm), then for
-# some languages it is necessary to reference the Ice-provided libraries containing those definitions
-# when building the component. The names of the needed libraries can be provided using this function.
-# It is not necessary to specify that IceBox is required for IceBox services, as the
-# asterisk_scf_component_build_icebox() function will handle that automatically.
-asterisk_scf_slice_add_ice_libraries(fluxcapacitor IceStorm)
-
# This function takes a component name as the parameter. It builds an IceBox service that IceBox can load.
asterisk_scf_component_build_icebox(examplebox)
@@ -108,7 +100,7 @@ asterisk_scf_component_build_icebox(examplebox)
asterisk_scf_component_install(examplebox LIBRARY lib "Icebox example component." Core)
# Now we move on to the next component, a standalone executable.
-asterisk_scf_component_init(example CXX)
+asterisk_scf_component_init(example)
asterisk_scf_component_add_slice(example fluxcapacitor)
asterisk_scf_component_add_file(example example.cpp)
diff --git a/modules/CMakeCSharpCompiler.cmake.in b/modules/CMakeCSharpCompiler.cmake.in
deleted file mode 100644
index 7d17148..0000000
--- a/modules/CMakeCSharpCompiler.cmake.in
+++ /dev/null
@@ -1,7 +0,0 @@
-set(CMAKE_CSharp_COMPILER "@CMAKE_CSharp_COMPILER@")
-set(CMAKE_CSharp_COMPILER_LOADED @CMAKE_CSharp_COMPILER_LOADED@)
-set(GAC_DIR @GAC_DIR@)
-
-set(_csc_default_lib_path @_csc_default_lib_path@ CACHE INTERNAL "")
-
-set(CMAKE_CSharp_COMPILER_ENV_VAR "CSC")
diff --git a/modules/CMakeCSharpInformation.cmake b/modules/CMakeCSharpInformation.cmake
deleted file mode 100644
index 7ef0e44..0000000
--- a/modules/CMakeCSharpInformation.cmake
+++ /dev/null
@@ -1,375 +0,0 @@
-# copyright (c) 2007, 2009 Arno Rehn arno at arnorehn.de
-# copyright (c) 2008 Helio castro helio at kde.org
-#
-# Redistribution and use is allowed according to the terms of the GPL license.
-
-# This file adds support for the C# language to cmake.
-#
-# It adds the following functions:
-#
-# csharp_add_executable (<name> <source files> [UNSAFE] [WINEXE] [REFERENCES <references>]
-# [COMPILE_FLAGS <flags to be passed to the compiler>]
-# [COMPILE_DEFINITIONS <additional definitions>] )
-#
-# csharp_add_library (<name> <source files> [UNSAFE] [REFERENCES <references>]
-# [COMPILE_FLAGS <flags to be passed to the compiler>]
-# [COMPILE_DEFINITIONS <additional definitions>] )
-#
-# install_assembly (<target name> DESTINATION <assembly destination directory>
-# [PACKAGE <package name>] )
-# The assembly destination directory is only used if we compile with Visual C# and thus can't use gacutil.
-# If a package is specified and a file called <target>.pc.cmake exists in the current source directory,
-# this function will configure the template file. All occurences of @assembly@ will be replaced with
-# the path to the assembly. The resulting <target>.pc file will be installed to
-# <CMAKE_INSTALL_PREFIX>/lib/pkgconfig/ . If you want to have a different basename for the template file,
-# set the 'pkg-config_template_basename' property of the target with set_property.
-#
-# Example:
-# ------------------------------
-# cmake code:
-# ------------------------------
-# csharp_add_library(foo foo.cs)
-# install_assembly(foo DESTINATION lib)
-#
-# ------------------------------
-# contents of foo.pc.cmake file:
-# ------------------------------
-# Name: Foo
-# Description: Foo library
-# Version: 1.0
-# Libs: -r:@assembly@
-
-# ----- support macros -----
-macro(GET_LIBRARY_OUTPUT_DIR var)
- if (NOT LIBRARY_OUTPUT_PATH)
- set(${var} ${CMAKE_CURRENT_BINARY_DIR})
- else (NOT LIBRARY_OUTPUT_PATH)
- set(${var} ${LIBRARY_OUTPUT_PATH})
- endif (NOT LIBRARY_OUTPUT_PATH)
-endmacro(GET_LIBRARY_OUTPUT_DIR)
-
-macro(GET_EXECUTABLE_OUTPUT_DIR var)
- if (NOT EXECUTABLE_OUTPUT_PATH)
- set(${var} ${CMAKE_CURRENT_BINARY_DIR})
- else (NOT EXECUTABLE_OUTPUT_PATH)
- set(${var} ${EXECUTABLE_OUTPUT_PATH})
- endif (NOT EXECUTABLE_OUTPUT_PATH)
-endmacro(GET_EXECUTABLE_OUTPUT_DIR)
-
-# This does just not always work... why?!
-# macro(MAKE_PROPER_FILE_LIST var)
-# foreach(file ${ARGN})
-# if (IS_ABSOLUTE "${file}")
-# file(GLOB globbed "${file}")
-# else (IS_ABSOLUTE "${file}")
-# file(GLOB globbed "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
-# endif (IS_ABSOLUTE "${file}")
-#
-# foreach (glob ${globbed})
-# file(TO_NATIVE_PATH "${glob}" native)
-# list(APPEND proper_file_list "${native}")
-# endforeach (glob ${globbed})
-# endforeach(file ${ARGN})
-# endmacro(MAKE_PROPER_FILE_LIST)
-
-# ----- actual functions -----
-
-function(csharp_add_target_reference target ref)
- get_property(prop TARGET ${ref} PROPERTY _assembly)
- if(NOT prop)
- message(FATAL_ERROR "Cannot use ${ref} as a reference for ${target}, it is not a CSharp library")
- endif()
- set(work ${references})
- list(APPEND work "/r:${prop}")
- set(references ${work} PARENT_SCOPE)
- set(work ${deps})
- list(APPEND work ${ref})
- set(deps ${work} PARENT_SCOPE)
- set(work ${deptargets})
- list(APPEND work ${ref})
- set(deptargets ${work} PARENT_SCOPE)
-endfunction()
-
-function(csharp_add_path_reference target path)
- file(TO_NATIVE_PATH ${path} native_path)
- set(work ${references})
- list(APPEND work "/r:${native_path}")
- set(references ${work} PARENT_SCOPE)
- set(work ${deppaths})
- list(APPEND work "${path}")
- set(deppaths ${work} PARENT_SCOPE)
-endfunction()
-
-# ----- add a reference for an executable or library -----
-macro(csharp_add_reference target ref)
- if(TARGET ${ref})
- csharp_add_target_reference(${target} ${ref})
- # handle transitive references to targets
- get_property(dt TARGET ${ref} PROPERTY _deptargets)
- if(dt)
- foreach(dep ${dt})
- csharp_add_target_reference(${target} ${dep})
- endforeach()
- endif()
- # handle transitive references to native paths
- get_property(dp TARGET ${ref} PROPERTY _deppaths)
- if(dp)
- foreach(dep ${dp})
- csharp_add_path_reference(${target} "${dep}")
- endforeach()
- endif()
- else()
- file(TO_CMAKE_PATH ${arg} cmake_path)
- csharp_add_path_reference(${target} "${cmake_path}")
- endif()
-endmacro()
-
-# ----- add an executable -----
-function(csharp_add_executable target)
- set(current "s")
- set(dotnet_target "exe")
-
- foreach (arg ${ARGN})
- if (arg STREQUAL "UNSAFE")
... 384 lines suppressed ...
--
asterisk-scf/integration/cmake.git
More information about the asterisk-scf-commits
mailing list