Make building with GeoIP, Python, Capabilities and c-ares

actually work.

svn path=/trunk/; revision=29870
This commit is contained in:
Jörg Mayer 2009-09-12 17:20:08 +00:00
parent deae5061be
commit 7eed375f9d
8 changed files with 240 additions and 31 deletions

View File

@ -82,17 +82,17 @@ option(ENABLE_ADNS "Build with adns support" ON)
option(ENABLE_PCRE "Build with pcre support" ON)
option(ENABLE_PORTAUDIO "Build with portaudio support" ON)
option(ENABLE_Z "Build with zlib compression support" ON)
# todo wslua currently seems to be broken
option(ENABLE_LUA "Build with lua dissector support" OFF)
option(ENABLE_PYTHON "Build with python dissector support" ON)
option(ENABLE_SMI "Build with smi snmp support" ON)
option(ENABLE_GNUTLS "Build with GNU TLS support" ON)
option(ENABLE_GCRYPT "Build with GNU crypto support" ON)
option(ENABLE_GEOIP "Build with GeoIP support" ON)
option(ENABLE_CAP "Build with posix capabilities support" ON)
option(ENABLE_CARES "Build with c_ares support" ON)
# todo Mostly hardcoded
option(ENABLE_KERBEROS "Build with Kerberos support" ON)
# Untested
option(ENABLE_GEOIP "Build with GeoIP support" OFF)
option(ENABLE_CAP "Build with posix capabilities support" OFF)
option(ENABLE_CARES "Build with c_ares support" OFF)
option(ENABLE_PYTHON "Build with python dissector support" OFF)
if(ENABLE_EXTRA_GCC_CHECKS)
@ -154,13 +154,11 @@ if(ENABLE_PORTAUDIO)
set(PACKAGELIST PORTAUDIO ${PACKAGELIST})
endif()
# C Asynchronouse resolver
if(ENABLE_CARES)
set(PACKAGELIST CARES ${PACKAGELIST})
endif()
#Gnu asynchronous DNS
if(ENABLE_ADNS)
# Prefer c-ares over adns
if(ENABLE_CARES) # C Asynchronouse resolver
set(PACKAGELIST CARES ${PACKAGELIST})
elseif(ENABLE_ADNS) # Gnu asynchronous DNS
set(PACKAGELIST ADNS ${PACKAGELIST})
endif()
@ -184,6 +182,10 @@ if(ENABLE_CAP)
set(PACKAGELIST CAP ${PACKAGELIST})
endif()
if(ENABLE_PYTHON)
set(PACKAGELIST PYTHON ${PACKAGELIST})
endif()
set(PROGLIST text2pcap mergecap capinfos editcap dumpcap)
#Let's loop the package list
@ -191,24 +193,17 @@ foreach(PACKAGE ${PACKAGELIST})
find_package(${PACKAGE} REQUIRED)
message(${PACKAGE}_FOUND)
if (${PACKAGE}_FOUND)
set(HAVE_LIB${PACKAGE} "1")
set(HAVE_LIB${PACKAGE} 1)
include_directories(${${PACKAGE}_INCLUDE_DIRS})
message(STATUS "${PACKAGE} includes: ${${PACKAGE}_INCLUDE_DIRS}")
message(STATUS "${PACKAGE} libs: ${${PACKAGE}_LIBRARIES}")
endif()
endforeach()
if(ENABLE_PYTHON)
find_package(FindPythonLibs)
message(PYTHONLIBS_FOUND)
if (PYTHONLIBS_FOUND)
set(HAVE_LIBPYTHON "1")
include_directories(PYTHON_INCLUDE_PATH)
message(STATUS "${PACKAGE} includes: ${PYTHON_INCLUDE_PATH}")
message(STATUS "${PACKAGE} libs: ${PYTHON_LIBRARIES}")
endif()
if(HAVE_LIBPYTHON)
set(HAVE_PYTHON 1)
set(PYTHON_DIR "${CMAKE_INSTALL_PREFIX}/lib/wireshark/python/${VERSION}")
endif()
if(HAVE_LIBLUA)
set(HAVE_LUA_H 1)
set(HAVE_LUA_5_1 1)
@ -219,9 +214,13 @@ if(HAVE_LIBKERBEROS)
set(HAVE_MIT_KERBEROS 1)
set(HAVE_KEYTYPE_ARCFOUR_56 1)
endif()
if(HAVE_LIBGEOIP)
set(HAVE_GEOIP 1)
endif()
if(HAVE_LIBCARES)
set(HAVE_C_ARES 1)
elseif(HAVE_LIBADNS)
endif()
if(HAVE_LIBADNS)
set(HAVE_GNU_ADNS 1)
endif()
if(ENABLE_AIRPCAP)
@ -591,12 +590,12 @@ if(BUILD_dumpcap)
# @INET_NTOP_LO@
${GLIB2_LIBRARIES}
${PCAP_LIBRARIES}
${CAP_LIBRARIES}
# @SOCKET_LIBS@
# @NSL_LIBS@
# @FRAMEWORKS@
${GCRYPT_LIBRARIES}
${GNUTLS_LIBRARIES}
# @LIBCAP_LIBS@
${Z_LIBRARIES}
)

View File

@ -1,3 +1,6 @@
# todo: result for NEED_... is wrong (inverted), at least
# in the case of getopt
#check system for includes
include(CheckIncludeFile)
check_include_file("arpa/inet.h" HAVE_ARPA_INET_H)

View File

@ -64,7 +64,6 @@ clean source.
What needs to be done?
======================
- Test detection/build with a few remaining packages
- Add back -Werror flags.
- Redo glib2 and gtk2 find modules.
- Add back platform specific objects.

View File

@ -11,7 +11,7 @@ IF (CAP_INCLUDE_DIRS)
SET(CAP_FIND_QUIETLY TRUE)
ENDIF (CAP_INCLUDE_DIRS)
FIND_PATH(CAP_INCLUDE_DIR cap.h)
FIND_PATH(CAP_INCLUDE_DIR sys/capability.h)
SET(CAP_NAMES cap)
FIND_LIBRARY(CAP_LIBRARY NAMES ${CAP_NAMES} )

View File

@ -11,7 +11,7 @@ IF (CARES_INCLUDE_DIRS)
SET(CARES_FIND_QUIETLY TRUE)
ENDIF (CARES_INCLUDE_DIRS)
FIND_PATH(CARES_INCLUDE_DIR cares.h)
FIND_PATH(CARES_INCLUDE_DIR ares.h)
SET(CARES_NAMES cares)
FIND_LIBRARY(CARES_LIBRARY NAMES ${CARES_NAMES} )

View File

@ -0,0 +1,196 @@
# - Find python libraries
# This module finds if Python is installed and determines where the
# include files and libraries are. It also determines what the name of
# the library is. This code sets the following variables:
#
# PYTHON_FOUND = have the Python libs been found
# PYTHON_LIBRARIES = path to the python library
# PYTHON_INCLUDE_DIRS = path to where Python.h is found
#
FIND_PROGRAM(CMAKE_PYTHON_CONFIG_EXECUTABLE
NAMES
python-config
DOC
"python-config executable"
PATHS
$ENV{PYTHON}
$ENV{PYTHON}/bin
)
# check wether python-config was found:
IF(CMAKE_PYTHON_CONFIG_EXECUTABLE)
EXEC_PROGRAM(${CMAKE_PYTHON_CONFIG_EXECUTABLE}
ARGS
--includes
OUTPUT_VARIABLE
PYTHON_CONFIG_INCLUDE_DIR
)
EXEC_PROGRAM(${CMAKE_PYTHON_CONFIG_EXECUTABLE}
ARGS
--libs
OUTPUT_VARIABLE
PYTHON_CONFIG_LIBRARIES
)
string(REGEX REPLACE
"^ *-I"
""
PYTHON_CONFIG_INCLUDE_DIR
"${PYTHON_CONFIG_INCLUDE_DIR}"
)
string(REGEX REPLACE
"^ *-l"
""
PYTHON_CONFIG_LIBRARIES
"${PYTHON_CONFIG_LIBRARIES}"
)
string(REGEX REPLACE
" +-I"
";"
PYTHON_INCLUDE_DIR
"${PYTHON_CONFIG_INCLUDE_DIR}"
)
string(REGEX REPLACE
" +-l"
";"
PYTHON_LIBRARY
"${PYTHON_CONFIG_LIBRARIES}"
)
ELSE(CMAKE_PYTHON_CONFIG_EXECUTABLE)
INCLUDE(CMakeFindFrameworks)
# Search for the python framework on Apple.
CMAKE_FIND_FRAMEWORKS(Python)
FOREACH(_CURRENT_VERSION 2.6 2.5 2.4 2.3 2.2 2.1 2.0 1.6 1.5)
STRING(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION})
FIND_LIBRARY(PYTHON_LIBRARY
NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION}
PATHS
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
PATH_SUFFIXES
python${_CURRENT_VERSION}/config
)
SET(PYTHON_FRAMEWORK_INCLUDES)
IF(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR)
FOREACH(dir ${Python_FRAMEWORKS})
SET(PYTHON_FRAMEWORK_INCLUDES ${PYTHON_FRAMEWORK_INCLUDES}
${dir}/Versions/${_CURRENT_VERSION}/include/python${_CURRENT_VERSION})
ENDFOREACH(dir)
ENDIF(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR)
FIND_PATH(PYTHON_INCLUDE_DIR
NAMES Python.h
PATHS
${PYTHON_FRAMEWORK_INCLUDES}
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
PATH_SUFFIXES
python${_CURRENT_VERSION}
)
ENDFOREACH(_CURRENT_VERSION)
ENDIF(CMAKE_PYTHON_CONFIG_EXECUTABLE)
# Python Should be built and installed as a Framework on OSX
IF(Python_FRAMEWORKS)
# If a framework has been selected for the include path,
# make sure "-framework" is used to link it.
IF("${PYTHON_INCLUDE_DIR}" MATCHES "Python\\.framework")
SET(PYTHON_LIBRARY "")
ENDIF("${PYTHON_INCLUDE_DIR}" MATCHES "Python\\.framework")
IF(NOT PYTHON_LIBRARY)
SET (PYTHON_LIBRARY "-framework Python" CACHE FILEPATH "Python Framework" FORCE)
ENDIF(NOT PYTHON_LIBRARY)
ENDIF(Python_FRAMEWORKS)
MARK_AS_ADVANCED(
PYTHON_LIBRARIES
PYTHON_INCLUDE_DIRS
)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PYTHON DEFAULT_MSG PYTHON_LIBRARY PYTHON_INCLUDE_DIR)
IF(PYTHON_FOUND)
SET( PYTHON_LIBRARIES ${PYTHON_LIBRARY} )
SET( PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} )
ELSE(PYTHON_FOUND)
SET( PYTHON_LIBRARIES )
SET( PYTHON_INCLUDE_DIRS )
ENDIF(PYTHON_FOUND)
# PYTHON_ADD_MODULE(<name> src1 src2 ... srcN) is used to build modules for python.
# PYTHON_WRITE_MODULES_HEADER(<filename>) writes a header file you can include
# in your sources to initialize the static python modules
GET_PROPERTY(_TARGET_SUPPORTS_SHARED_LIBS
GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
FUNCTION(PYTHON_ADD_MODULE _NAME )
OPTION(PYTHON_ENABLE_MODULE_${_NAME} "Add module ${_NAME}" TRUE)
OPTION(PYTHON_MODULE_${_NAME}_BUILD_SHARED "Add module ${_NAME} shared" ${_TARGET_SUPPORTS_SHARED_LIBS})
IF(PYTHON_ENABLE_MODULE_${_NAME})
IF(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
SET(PY_MODULE_TYPE MODULE)
ELSE(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
SET(PY_MODULE_TYPE STATIC)
SET_PROPERTY(GLOBAL APPEND PROPERTY PY_STATIC_MODULES_LIST ${_NAME})
ENDIF(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
SET_PROPERTY(GLOBAL APPEND PROPERTY PY_MODULES_LIST ${_NAME})
ADD_LIBRARY(${_NAME} ${PY_MODULE_TYPE} ${ARGN})
# TARGET_LINK_LIBRARIES(${_NAME} ${PYTHON_LIBRARIES})
ENDIF(PYTHON_ENABLE_MODULE_${_NAME})
ENDFUNCTION(PYTHON_ADD_MODULE)
FUNCTION(PYTHON_WRITE_MODULES_HEADER _filename)
GET_PROPERTY(PY_STATIC_MODULES_LIST GLOBAL PROPERTY PY_STATIC_MODULES_LIST)
GET_FILENAME_COMPONENT(_name "${_filename}" NAME)
STRING(REPLACE "." "_" _name "${_name}")
STRING(TOUPPER ${_name} _name)
SET(_filenameTmp "${_filename}.in")
FILE(WRITE ${_filenameTmp} "/*Created by cmake, do not edit, changes will be lost*/\n")
FILE(APPEND ${_filenameTmp}
"#ifndef ${_name}
#define ${_name}
#include <Python.h>
#ifdef __cplusplus
extern \"C\" {
#endif /* __cplusplus */
")
FOREACH(_currentModule ${PY_STATIC_MODULES_LIST})
FILE(APPEND ${_filenameTmp} "extern void init${PYTHON_MODULE_PREFIX}${_currentModule}(void);\n\n")
ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST})
FILE(APPEND ${_filenameTmp}
"#ifdef __cplusplus
}
#endif /* __cplusplus */
")
FOREACH(_currentModule ${PY_STATIC_MODULES_LIST})
FILE(APPEND ${_filenameTmp} "int CMakeLoadPythonModule_${_currentModule}(void) \n{\n static char name[]=\"${PYTHON_MODULE_PREFIX}${_currentModule}\"; return PyImport_AppendInittab(name, init${PYTHON_MODULE_PREFIX}${_currentModule});\n}\n\n")
ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST})
FILE(APPEND ${_filenameTmp} "#ifndef EXCLUDE_LOAD_ALL_FUNCTION\nvoid CMakeLoadAllPythonModules(void)\n{\n")
FOREACH(_currentModule ${PY_STATIC_MODULES_LIST})
FILE(APPEND ${_filenameTmp} " CMakeLoadPythonModule_${_currentModule}();\n")
ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST})
FILE(APPEND ${_filenameTmp} "}\n#endif\n\n#endif\n")
# with CONFIGURE_FILE() cmake complains that you may not use a file created using FILE(WRITE) as input file for CONFIGURE_FILE()
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_filenameTmp}" "${_filename}" OUTPUT_QUIET ERROR_QUIET)
ENDFUNCTION(PYTHON_WRITE_MODULES_HEADER)

View File

@ -1,5 +1,8 @@
/* cmakeconfig.h.in */
/* Version number of package */
#define VERSION "@CPACK_PACKAGE_VERSION@"
/* Directory for data */
#define DATAFILE_DIR "@CMAKE_INSTALL_PREFIX@/share/@CPACK_PACKAGE_NAME@"
@ -42,6 +45,12 @@
/* Define to use SMI SNMP library */
#cmakedefine HAVE_LIBSMI 1
/* Define to use GEOIP library */
#cmakedefine HAVE_GEOIP 1
/* Define to use capabilities library */
#cmakedefine HAVE_LIBCAP 1
/* Define to use GNU ADNS library */
#cmakedefine HAVE_GNU_ADNS 1
@ -105,6 +114,12 @@
/* Define to 1 if you have the <lua.h> header file. */
#cmakedefine HAVE_LUA_H 1
/* Define to 1 if you have libpython. */
#cmakedefine HAVE_PYTHON 1
/* Path to Python. */
#cmakedefine PYTHON_DIR "${CMAKE_INSTALL_PREFIX}/lib/${CPACK_PACKAGE_NAME}/python/${VERSION}"
/* Define to 1 if you have the <memory.h> header file. */
#cmakedefine HAVE_MEMORY_H 1
@ -304,9 +319,6 @@
/* Note: not use in the code */
#cmakedefine STDC_HEADERS 1
/* Version number of package */
#define VERSION "@CPACK_PACKAGE_VERSION@"
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#cmakedefine WORDS_BIGENDIAN 1

View File

@ -1175,7 +1175,7 @@ add_library(epan SHARED
target_link_libraries(epan
${WSLUA_LIB}
${PYTHON_LIB}
${WSPYTHON_LIB}
)
add_dependencies(epan lemon)