Adjust CMake files to use submodules instead of downloading archives

This commit is contained in:
Mike Gelfand 2017-01-01 21:40:11 +03:00
parent eb437c16f5
commit e83a062417
15 changed files with 10 additions and 424 deletions

View File

@ -103,13 +103,6 @@ set(GLIB_MINIMUM 2.32.0)
set(GIO_MINIMUM 2.26.0)
set(LIBAPPINDICATOR_MINIMUM 0.4.90)
tr_github_upstream(EVENT2 transmission/libevent c51b159cff 7be95856a39714dfd2218cb56415c990)
tr_github_upstream(NATPMP transmission/libnatpmp cf7f452d66 f1e7d5bf580972738d8ef21743d0adf7)
tr_github_upstream(MINIUPNPC transmission/miniupnp 5de2bcb561 bdc5b64b9b8401d3524c50b9ec8173c1)
tr_github_upstream(DHT transmission/dht cc379e406d 958253fafa01c59950d357c148aff090)
tr_github_upstream(UTP transmission/libutp 7c4f19abdf 8b92aa05abec5f6675cdde6477cd6f51)
tr_github_upstream(B64 transmission/libb64 c1e3323498 10128cb30ad768d2c4caf627e0f69db3)
if(WIN32)
foreach(L C CXX)
# Target version (Vista and up)
@ -292,31 +285,20 @@ endif()
set(THIRD_PARTY_DIR ${CMAKE_SOURCE_DIR}/third-party)
if(WIN32)
tr_add_external_auto_library(EVENT2 event
PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/event2.cmake" "<SOURCE_DIR>/CMakeLists.txt"
COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 -i "${THIRD_PARTY_DIR}/event2-01-win32.patch"
COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 -i "${THIRD_PARTY_DIR}/event2-02-win32.patch")
tr_add_external_auto_library(EVENT2 libevent event)
else()
tr_add_external_auto_library(EVENT2 event
tr_add_external_auto_library(EVENT2 libevent event
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND "<SOURCE_DIR>/autogen.sh"
COMMAND "<SOURCE_DIR>/configure" "--prefix=<INSTALL_DIR>" "--disable-shared")
endif()
tr_add_external_auto_library(NATPMP natpmp
PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/natpmp.cmake" "<SOURCE_DIR>/CMakeLists.txt")
tr_add_external_auto_library(NATPMP libnatpmp natpmp)
if(NOT USE_SYSTEM_NATPMP)
set(NATPMP_DEFINITIONS -DNATPMP_STATICLIB)
endif()
tr_add_external_auto_library(MINIUPNPC miniupnpc
PATCH_COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/minissdpd"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpc-async"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpc-libevent"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpd"
COMMAND "${CMAKE_COMMAND}" -E remove "<SOURCE_DIR>/README"
COMMAND "${CMAKE_COMMAND}" -E copy_directory "<SOURCE_DIR>/miniupnpc" "<SOURCE_DIR>"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpc"
tr_add_external_auto_library(MINIUPNPC miniupnpc miniupnpc
CMAKE_ARGS
-DUPNPC_BUILD_STATIC=ON
-DUPNPC_BUILD_SHARED=OFF
@ -328,22 +310,13 @@ if(NOT USE_SYSTEM_MINIUPNPC)
set(MINIUPNPC_API_VERSION 12)
endif()
tr_add_external_auto_library(DHT dht
PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/dht.cmake" "<SOURCE_DIR>/CMakeLists.txt")
tr_add_external_auto_library(DHT dht dht)
if(ENABLE_UTP)
tr_add_external_auto_library(UTP utp
PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/utp.cmake" "<SOURCE_DIR>/CMakeLists.txt"
COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/utp_config.h" "<SOURCE_DIR>/utp_config.h"
COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 --binary -i "${THIRD_PARTY_DIR}/utp-01-ticket-5002.patch"
COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 --binary -i "${THIRD_PARTY_DIR}/utp-02-win32.patch"
COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 --binary -i "${THIRD_PARTY_DIR}/utp-03-msvc14.patch")
tr_add_external_auto_library(UTP libutp utp)
endif()
tr_add_external_auto_library(B64 b64
PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/b64.cmake" "<SOURCE_DIR>/CMakeLists.txt"
COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 -i "${THIRD_PARTY_DIR}/b64-01-newline.patch"
COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 -i "${THIRD_PARTY_DIR}/b64-02-unsigned-char.patch")
tr_add_external_auto_library(B64 libb64 b64)
if(WITH_INOTIFY)
tr_get_required_flag(WITH_INOTIFY INOTIFY_IS_REQUIRED)

View File

@ -69,15 +69,7 @@ function(tr_make_id INPUT OVAR)
set(${OVAR} "${ID}" PARENT_SCOPE)
endfunction()
macro(tr_github_upstream ID REPOID RELID RELMD5)
set(${ID}_RELEASE "${RELID}")
set(${ID}_UPSTREAM URL "https://github.com/${REPOID}/archive/${RELID}.tar.gz")
if(NOT SKIP_UPSTREAM_CHECKSUM)
list(APPEND ${ID}_UPSTREAM URL_MD5 "${RELMD5}")
endif()
endmacro()
macro(tr_add_external_auto_library ID LIBNAME)
macro(tr_add_external_auto_library ID DIRNAME LIBNAME)
if(USE_SYSTEM_${ID})
tr_get_required_flag(USE_SYSTEM_${ID} SYSTEM_${ID}_IS_REQUIRED)
find_package(${ID} ${${ID}_MINIMUM} ${SYSTEM_${ID}_IS_REQUIRED})
@ -87,7 +79,7 @@ macro(tr_add_external_auto_library ID LIBNAME)
if(USE_SYSTEM_${ID})
unset(${ID}_UPSTREAM_TARGET)
else()
set(${ID}_UPSTREAM_TARGET ${LIBNAME}-${${ID}_RELEASE})
set(${ID}_UPSTREAM_TARGET ${LIBNAME})
set(${ID}_PREFIX "${CMAKE_BINARY_DIR}/third-party/${${ID}_UPSTREAM_TARGET}")
set(${ID}_INCLUDE_DIR "${${ID}_PREFIX}/include" CACHE INTERNAL "")
@ -98,7 +90,7 @@ macro(tr_add_external_auto_library ID LIBNAME)
ExternalProject_Add(
${${ID}_UPSTREAM_TARGET}
${${ID}_UPSTREAM}
URL "${CMAKE_SOURCE_DIR}/third-party/${DIRNAME}"
${ARGN}
PREFIX "${${ID}_PREFIX}"
CMAKE_ARGS

View File

@ -1,38 +0,0 @@
diff --git a/src/cencode.c b/src/cencode.c
--- a/src/cencode.c
+++ b/src/cencode.c
@@ -7,7 +7,9 @@ For details, see http://sourceforge.net/projects/libb64
#include <b64/cencode.h>
+/*
const int CHARS_PER_LINE = 72;
+*/
void base64_init_encodestate(base64_encodestate* state_in)
{
@@ -72,12 +74,14 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
result = (fragment & 0x03f) >> 0;
*codechar++ = base64_encode_value(result);
+ /*
++(state_in->stepcount);
if (state_in->stepcount == CHARS_PER_LINE/4)
{
*codechar++ = '\n';
state_in->stepcount = 0;
}
+ */
}
}
/* control should not reach here */
@@ -102,7 +106,9 @@ int base64_encode_blockend(char* code_out, base64_encodestate* state_in)
case step_A:
break;
}
+ /*
*codechar++ = '\n';
+ */
return codechar - code_out;
}

View File

@ -1,57 +0,0 @@
diff --git a/src/cdecode.c b/src/cdecode.c
--- a/src/cdecode.c
+++ b/src/cdecode.c
@@ -9,7 +9,7 @@
int base64_decode_value(char value_in)
{
- static const char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51};
+ static const signed char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51};
static const char decoding_size = sizeof(decoding);
value_in -= 43;
if (value_in < 0 || value_in >= decoding_size) return -1;
@@ -26,7 +26,7 @@
{
const char* codechar = code_in;
char* plainchar = plaintext_out;
- char fragment;
+ int fragment;
*plainchar = state_in->plainchar;
@@ -42,7 +42,7 @@
state_in->plainchar = *plainchar;
return plainchar - plaintext_out;
}
- fragment = (char)base64_decode_value(*codechar++);
+ fragment = base64_decode_value(*codechar++);
} while (fragment < 0);
*plainchar = (fragment & 0x03f) << 2;
case step_b:
@@ -53,7 +53,7 @@
state_in->plainchar = *plainchar;
return plainchar - plaintext_out;
}
- fragment = (char)base64_decode_value(*codechar++);
+ fragment = base64_decode_value(*codechar++);
} while (fragment < 0);
*plainchar++ |= (fragment & 0x030) >> 4;
*plainchar = (fragment & 0x00f) << 4;
@@ -65,7 +65,7 @@
state_in->plainchar = *plainchar;
return plainchar - plaintext_out;
}
- fragment = (char)base64_decode_value(*codechar++);
+ fragment = base64_decode_value(*codechar++);
} while (fragment < 0);
*plainchar++ |= (fragment & 0x03c) >> 2;
*plainchar = (fragment & 0x003) << 6;
@@ -77,7 +77,7 @@
state_in->plainchar = *plainchar;
return plainchar - plaintext_out;
}
- fragment = (char)base64_decode_value(*codechar++);
+ fragment = base64_decode_value(*codechar++);
} while (fragment < 0);
*plainchar++ |= (fragment & 0x03f);
}

12
third-party/b64.cmake vendored
View File

@ -1,12 +0,0 @@
cmake_minimum_required(VERSION 2.8)
project(b64 C)
include_directories(include)
add_library(${PROJECT_NAME} STATIC
src/cdecode.c
src/cencode.c
)
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
install(DIRECTORY include/b64 DESTINATION include)

View File

@ -1,9 +0,0 @@
cmake_minimum_required(VERSION 2.8)
project(dht C)
add_library(${PROJECT_NAME} STATIC
dht.c
)
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
install(FILES dht.h DESTINATION include/dht)

View File

@ -1,14 +0,0 @@
diff --git a/WIN32-Code/event2/event-config.h b/WIN32-Code/event2/event-config.h
--- a/WIN32-Code/event2/event-config.h
+++ b/WIN32-Code/event2/event-config.h
@@ -167,7 +167,9 @@
/* #undef _EVENT_HAVE_STRSEP */
/* Define to 1 if you have the `strtok_r' function. */
-/* #undef _EVENT_HAVE_STRTOK_R */
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#define _EVENT_HAVE_STRTOK_R 1
+#endif
/* Define to 1 if you have the `strtoll' function. */
/* #define _EVENT_HAVE_STRTOLL 1 */

View File

@ -1,12 +0,0 @@
diff --git a/evutil.c b/evutil.c
--- a/evutil.c
+++ b/evutil.c
@@ -1562,7 +1562,7 @@
int r;
if (!buflen)
return 0;
-#if defined(_MSC_VER) || defined(WIN32)
+#if (defined(_MSC_VER) && _MSC_VER < 1900) || (defined(WIN32) && (!defined(__USE_MINGW_ANSI_STDIO) || (__USE_MINGW_ANSI_STDIO + 0) == 0))
r = _vsnprintf(buf, buflen, format, ap);
if (r < 0)
r = _vscprintf(format, ap);

View File

@ -1,41 +0,0 @@
cmake_minimum_required(VERSION 2.8)
project(event C)
set(${PROJECT_NAME}_ADD_SOURCES
win32select.c
evthread_win32.c
buffer_iocp.c
event_iocp.c
bufferevent_async.c
)
add_definitions(-DHAVE_CONFIG_H)
include_directories(include compat WIN32-Code)
add_library(${PROJECT_NAME} STATIC
event.c
buffer.c
bufferevent.c
bufferevent_sock.c
bufferevent_pair.c
listener.c
evmap.c
log.c
evutil.c
strlcpy.c
signal.c
bufferevent_filter.c
evthread.c
bufferevent_ratelim.c
evutil_rand.c
event_tagging.c
http.c
evdns.c
evrpc.c
${${PROJECT_NAME}_ADD_SOURCES}
)
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
install(DIRECTORY include/event2 DESTINATION include)
install(DIRECTORY WIN32-Code/event2 DESTINATION include)

View File

@ -1,19 +0,0 @@
cmake_minimum_required(VERSION 2.8)
project(natpmp C)
add_definitions(-DNATPMP_STATICLIB -DENABLE_STRNATPMPERR)
if(WIN32)
set(${PROJECT_NAME}_ADD_SOURCES
wingettimeofday.c
)
endif()
add_library(${PROJECT_NAME} STATIC
getgateway.c
natpmp.c
${${PROJECT_NAME}_ADD_SOURCES}
)
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
install(FILES declspec.h natpmp.h DESTINATION include)

View File

@ -1,52 +0,0 @@
diff --git a/utp.cpp b/utp.cpp
--- a/utp.cpp
+++ b/utp.cpp
@@ -1487,6 +1487,8 @@
return acked_bytes;
}
+enum { MAX_EACK = 128 };
+
void UTPSocket::selective_ack(uint base, const byte *mask, byte len)
{
if (cur_window_packets == 0) return;
@@ -1499,7 +1501,7 @@
// resends is a stack of sequence numbers we need to resend. Since we
// iterate in reverse over the acked packets, at the end, the top packets
// are the ones we want to resend
- int resends[32];
+ int resends[MAX_EACK];
int nr = 0;
LOG_UTPV("0x%08x: Got EACK [%032b] base:%u", this, *(uint32*)mask, base);
@@ -1572,6 +1574,12 @@
if (((v - fast_resend_seq_nr) & ACK_NR_MASK) <= OUTGOING_BUFFER_MAX_SIZE &&
count >= DUPLICATE_ACKS_BEFORE_RESEND &&
duplicate_ack < DUPLICATE_ACKS_BEFORE_RESEND) {
+ // resends is a stack, and we're mostly interested in the top of it
+ // if we're full, just throw away the lower half
+ if (nr >= MAX_EACK - 2) {
+ memmove(resends, &resends[MAX_EACK/2], MAX_EACK/2 * sizeof(resends[0]));
+ nr -= MAX_EACK / 2;
+ }
resends[nr++] = v;
LOG_UTPV("0x%08x: no ack for %u", this, v);
} else {
@@ -1580,13 +1588,12 @@
}
} while (--bits >= -1);
- if (((base - 1 - fast_resend_seq_nr) & ACK_NR_MASK) < 256 &&
- count >= DUPLICATE_ACKS_BEFORE_RESEND &&
- duplicate_ack < DUPLICATE_ACKS_BEFORE_RESEND) {
+ if (((base - 1 - fast_resend_seq_nr) & ACK_NR_MASK) <= OUTGOING_BUFFER_MAX_SIZE &&
+ count >= DUPLICATE_ACKS_BEFORE_RESEND) {
// if we get enough duplicate acks to start
// resending, the first packet we should resend
// is base-1
- resends[nr++] = base - 1;
+ resends[nr++] = (base - 1) & ACK_NR_MASK;
} else {
LOG_UTPV("0x%08x: not resending %u count:%d dup_ack:%u fast_resend_seq_nr:%u",
this, base - 1, count, duplicate_ack, fast_resend_seq_nr);

View File

@ -1,31 +0,0 @@
diff --git a/utp.h b/utp.h
--- a/utp.h
+++ b/utp.h
@@ -4,12 +4,18 @@
#include "utypes.h"
#ifdef WIN32
+#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
+#endif
+#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
+#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
+#ifdef _MSC_VER
#pragma comment(lib,"ws2_32.lib")
+#endif
#else
#include <stdlib.h>
#include <sys/types.h>
@@ -142,7 +148,7 @@
};
// Get stats for UTP socket
-void UTP_GetStats(struct UTPSocket *socket, UTPStats *stats);
+void UTP_GetStats(struct UTPSocket *socket, struct UTPStats *stats);
#endif
// Close the UTP socket.

View File

@ -1,30 +0,0 @@
diff --git a/utp.cpp b/utp.cpp
--- a/utp.cpp
+++ b/utp.cpp
@@ -859,7 +859,7 @@
int flags = version == 0 ? b->flags : b1->type();
uint16 seq_nr = version == 0 ? b->seq_nr : b1->seq_nr;
uint16 ack_nr = version == 0 ? b->ack_nr : b1->ack_nr;
- LOG_UTPV("0x%08x: send %s len:%u id:%u timestamp:"I64u" reply_micro:%u flags:%s seq_nr:%u ack_nr:%u",
+ LOG_UTPV("0x%08x: send %s len:%u id:%u timestamp:" I64u " reply_micro:%u flags:%s seq_nr:%u ack_nr:%u",
this, addrfmt(addr, addrbuf), (uint)length, conn_id_send, time, reply_micro, flagnames[flags],
seq_nr, ack_nr);
#endif
@@ -1705,7 +1705,7 @@
// used in parse_log.py
LOG_UTP("0x%08x: actual_delay:%u our_delay:%d their_delay:%u off_target:%d max_window:%u "
"delay_base:%u delay_sum:%d target_delay:%d acked_bytes:%u cur_window:%u "
- "scaled_gain:%f rtt:%u rate:%u quota:%d wnduser:%u rto:%u timeout:%d get_microseconds:"I64u" "
+ "scaled_gain:%f rtt:%u rate:%u quota:%d wnduser:%u rto:%u timeout:%d get_microseconds:" I64u " "
"cur_window_packets:%u packet_size:%u their_delay_base:%u their_actual_delay:%u",
this, actual_delay, our_delay / 1000, their_hist.get_value() / 1000,
(int)off_target / 1000, (uint)(max_window), our_hist.delay_base,
@@ -1790,7 +1790,7 @@
if (pk_flags >= ST_NUM_STATES) return 0;
- LOG_UTPV("0x%08x: Got %s. seq_nr:%u ack_nr:%u state:%s version:%u timestamp:"I64u" reply_micro:%u",
+ LOG_UTPV("0x%08x: Got %s. seq_nr:%u ack_nr:%u state:%s version:%u timestamp:" I64u " reply_micro:%u",
conn, flagnames[pk_flags], pk_seq_nr, pk_ack_nr, statenames[conn->state], conn->version,
conn->version == 0?(uint64)(pf->tv_sec) * 1000000 + pf->tv_usec:uint64(pf1->tv_usec),
conn->version == 0?(uint32)(pf->reply_micro):(uint32)(pf1->reply_micro));

21
third-party/utp.cmake vendored
View File

@ -1,21 +0,0 @@
cmake_minimum_required(VERSION 2.8)
project(utp CXX)
if(WIN32)
set(${PROJECT_NAME}_ADD_SOURCES
win32_inet_ntop.cpp
)
else()
add_definitions(-DPOSIX)
endif()
include_directories(.)
add_library(${PROJECT_NAME} STATIC
utp.cpp
utp_utils.cpp
${${PROJECT_NAME}_ADD_SOURCES}
)
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
install(FILES utp.h utypes.h DESTINATION include/libutp)

View File

@ -1,43 +0,0 @@
#define CCONTROL_TARGET (100 * 1000) // us
#define RATE_CHECK_INTERVAL 10000 // ms
#define DYNAMIC_PACKET_SIZE_ENABLED false
#define DYNAMIC_PACKET_SIZE_FACTOR 2
// This should return the global number of bytes sent, used for determining dynamic
// packet size based on rate
#ifdef _MSC_VER
#pragma message("WARNING: implement this in libtransmission")
#else
#warning implement this in libtransmission
#endif
uint64 UTP_GetGlobalUTPBytesSent(const struct sockaddr *remote, socklen_t remotelen) { return 0; }
enum bandwidth_type_t {
payload_bandwidth, connect_overhead,
close_overhead, ack_overhead,
header_overhead, retransmit_overhead
};
#ifdef _WIN32
#define I64u "%I64u"
#else
#define I64u "%Lu"
#endif
#ifdef _WIN32
#define snprintf _snprintf
#endif
#define g_log_utp 0
#define g_log_utp_verbose 0
void utp_log(char const* fmt, ...)
{
/*
printf("[%u] ", UTP_GetMilliseconds());
va_list vl;
va_start(vl, fmt);
vprintf(fmt, vl);
va_end(vl);
puts("");
fflush(stdout);
*/
};