cmake_minimum_required(VERSION 2.6) project(libtorrent) set(sources web_connection_base alert allocator assert bandwidth_limit bandwidth_manager bandwidth_queue_entry bloom_filter connection_queue create_torrent disk_buffer_holder entry error_code file_storage lazy_bdecode escape_string file gzip http_connection http_stream http_parser i2p_stream identify_client ip_filter peer_connection bt_peer_connection web_peer_connection http_seed_connection instantiate_connection natpmp packet_buffer piece_picker policy puff random rss session session_impl settings socket_io socket_type socks5_stream stat storage thread time torrent torrent_handle torrent_info tracker_manager http_tracker_connection udp_tracker_connection udp_socket upnp logger file_pool lsd disk_io_thread enum_net broadcast_socket magnet_uri parse_url ConvertUTF # -- extensions -- metadata_transfer ut_pex ut_metadata smart_ban lt_trackers ) # -- kademlia -- set(kademlia_sources dht_tracker node refresh rpc_manager find_data node_id routing_table traversal_algorithm ) set(includes include) option(shared "build libtorrent as a shared library" ON) option(tcmalloc "link against google performance tools tcmalloc" OFF) option(pool-allocators "Uses a pool allocator for disk and piece buffers" ON) option(encryption "link against openssl and enable encryption" ON) option(geoip "link against LGPL GeoIP code from Maxmind, to enable geoip database support" OFF) option(dht "enable support for Mainline DHT" ON) option(resolve-countries "enable support for resolving countries from peer IPs" ON) option(unicode "enable unicode support" ON) option(deprecated-functions "enable deprecated functions for backwards compatibility" ON) option(exceptions "build with exception support" ON) option(logging "build with logging" OFF) option(verbose-logging "build with verbose logging" OFF) option(build_tests "build tests" OFF) option(build_examples "build examples" OFF) set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo) if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release FORCE) endif (NOT CMAKE_BUILD_TYPE) # add_definitions() doesn't seem to let you say wich build type to apply it to set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DTORRENT_DEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os -g") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") if (encryption) list(APPEND sources pe_crypto) endif (encryption) if (logging) add_definitions(-DTORRENT_LOGGING) endif (logging) if (verbose-logging) add_definitions(-DTORRENT_VERBOSE_LOGGING) endif (verbose-logging) foreach(s ${sources}) list(APPEND sources2 src/${s}) endforeach(s) if (dht) foreach(s ${kademlia_sources}) list(APPEND sources2 src/kademlia/${s}) endforeach(s) else (dht) add_definitions(-DTORRENT_DISABLE_DHT) endif (dht) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") if (shared) add_library(torrent-rasterbar SHARED ${sources2}) else (shared) add_library(torrent-rasterbar STATIC ${sources2}) endif (shared) FIND_PACKAGE( Boost 1.34 COMPONENTS filesystem) if (NOT Boost_VERSION LESS 103500) FIND_PACKAGE( Boost 1.35 COMPONENTS filesystem system) endif (NOT Boost_VERSION LESS 103500) include_directories(${Boost_INCLUDE_DIR}) target_link_libraries(torrent-rasterbar ${Boost_LIBRARIES}) # this works around a bug in asio in boost-1.39 add_definitions(-DBOOST_ASIO_HASH_MAP_BUCKETS=1021) if (WIN32) target_link_libraries(torrent-rasterbar wsock32 ws2_32) endif (WIN32) if (encryption) add_definitions(-DTORRENT_USE_OPENSSL) if (WIN32) target_link_libraries(torrent-rasterbar ssleay32 libeay32 advapi32 user32 shell32 gdi32) else (WIN32) target_link_libraries(torrent-rasterbar crypto ssl) endif (WIN32) else (encryption) add_definitions(-DTORRENT_DISABLE_ENCRYPTION) list(APPEND sources sha1) endif (encryption) if (NOT pool-allocators) add_definitions(-DTORRENT_DISABLE_POOL_ALLOCATOR) endif (NOT pool-allocators) if (NOT geoip) add_definitions(-DTORRENT_DISABLE_GEO_IP) endif (NOT geoip) if (NOT resolve-countries) add_definitions(-DTORRENT_DISABLE_RESOLVE_COUNTRIES) endif (NOT resolve-countries) if (unicode) add_definitions(-DUNICODE -D_UNICODE) endif (unicode) if (NOT deprecated-functions) add_definitions(-DTORRENT_NO_DEPRECATE) endif (NOT deprecated-functions) if (exceptions) add_definitions(-fexceptions) else (exceptions) add_definitions(-fno-exceptions) endif (exceptions) if (MSVC) # disable bogus deprecation warnings on msvc8 add_definitions(-D_SCL_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE) # these compiler settings just makes the compiler standard conforming add_definitions(/Zc:wchar_t /Zc:forScope) # msvc,release:/OPT:ICF=5 # msvc,release:/OPT:REF endif(MSVC) add_definitions(-D_FILE_OFFSET_BITS=64) add_definitions(-DBOOST_DISABLE_EXCEPTION) add_definitions(-DBOOST_ASIO_ENABLE_CANCELIO) if (tcmalloc) target_link_libraries(torrent-rasterbar tcmalloc) endif (tcmalloc) target_link_libraries(torrent-rasterbar z) include_directories(${includes}) set_target_properties(torrent-rasterbar PROPERTIES SOVERSION 1 VERSION 1) set (VERSION "0.16.0") get_property (COMPILETIME_OPTIONS_LIST DIRECTORY ${CMAKE_CURRENT_SOURCE_DIRECTORY} PROPERTY COMPILE_DEFINITIONS ) foreach (s ${COMPILETIME_OPTIONS_LIST}) set (COMPILETIME_OPTIONS "${COMPILETIME_OPTIONS} -D${s}") endforeach (s) configure_file(libtorrent-rasterbar-cmake.pc.in libtorrent-rasterbar.pc) string (COMPARE EQUAL ${CMAKE_SIZEOF_VOID_P} "8" IS64BITS) if (IS64BITS AND RESPECTLIB64) set (LIBDIR "lib64") else (IS64BITS AND RESPECTLIB64) set (LIBDIR "lib") endif (IS64BITS AND RESPECTLIB64) install(TARGETS torrent-rasterbar DESTINATION ${LIBDIR} CONFIGURATIONS release) install(DIRECTORY include/libtorrent DESTINATION include PATTERN ".svn" EXCLUDE) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar.pc DESTINATION ${LIBDIR}/pkgconfig) # === build examples === if(build_examples) set(examples client_test dump_torrent simple_client enum_if make_torrent) foreach(s ${examples}) add_executable(${s} examples/${s}.cpp) target_link_libraries(${s} torrent-rasterbar) endforeach(s) FIND_PACKAGE( Boost 1.34 COMPONENTS program_options regex) target_link_libraries(client_test ${Boost_LIBRARIES}) include_directories(${Boost_INCLUDE_DIR}) endif(build_examples) # === build tests === if(build_tests) set(tests test_auto_unchoke test_http_connection test_buffer test_storage test_torrent test_dht test_transfer test_piece_picker test_fast_extension test_pe_crypto test_bencoding test_bdecode_performance test_primitives test_ip_filter test_hasher test_metadata_extension test_swarm test_lsd test_pex test_web_seed test_bandwidth_limiter ) add_library(test_common STATIC test/main.cpp test/setup_transfer.cpp) enable_testing() foreach(s ${tests}) add_executable(${s} test/${s}.cpp) target_link_libraries(${s} torrent-rasterbar test_common) add_test(${s} ${s}) endforeach(s) add_executable(test_upnp test/test_upnp.cpp) target_link_libraries(test_upnp torrent-rasterbar) add_executable(test_natpmp test/test_natpmp.cpp) target_link_libraries(test_natpmp torrent-rasterbar) endif(build_tests)