diff --git a/CMakeLists.txt b/CMakeLists.txt index aa8e989bb..6ba236938 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,20 +149,37 @@ if(APPLE) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl-framework,CoreFoundation") endif() +# Android +if(ANDROID) + set(WITH_X11 OFF) + set(WITH_CUPS OFF) + set(WITH_ALSA OFF) + set(WITH_PULSEAUDIO OFF) + set(WITH_FFMPEG OFF) + set(WITH_GSTREAMER OFF) + set(WITH_PCSC OFF) +endif() + if(NOT WIN32) find_required_package(ZLIB) find_optional_package(PulseAudio) find_optional_package(MacAudio) find_optional_package(PCSC) - find_suggested_package(Cups) + + if(NOT ANDROID) + find_suggested_package(Cups) + endif() if(NOT APPLE) - find_suggested_package(FFmpeg) find_suggested_package(XRandR) find_suggested_package(Gstreamer) - find_suggested_package(ALSA) - else(NOT APPLE) - find_optional_package(FFmpeg) + if(NOT ANDROID) + find_suggested_package(ALSA) + endif() + endif() + + if(NOT ANDROID) + find_suggested_package(FFmpeg) endif() endif() diff --git a/channels/audin/client/CMakeLists.txt b/channels/audin/client/CMakeLists.txt index 6a51d865b..a53cbcbdf 100644 --- a/channels/audin/client/CMakeLists.txt +++ b/channels/audin/client/CMakeLists.txt @@ -32,6 +32,7 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MODULE freerdp MODULES freerdp-utils) +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) install(TARGETS ${MODULE_NAME} DESTINATION ${FREERDP_PLUGIN_PATH}) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${MODULE_NAME}/Client") diff --git a/channels/disk/ChannelOptions.cmake b/channels/disk/ChannelOptions.cmake index 9bb8f8f15..353fd5428 100644 --- a/channels/disk/ChannelOptions.cmake +++ b/channels/disk/ChannelOptions.cmake @@ -6,6 +6,10 @@ set(CHANNEL_SPECIFICATIONS "[MS-RDPEFS]") string(TOUPPER "WITH_${CHANNEL_SHORT_NAME}" CHANNEL_OPTION) -option(${CHANNEL_OPTION} "Build ${CHANNEL_SHORT_NAME}" ON) +if(ANDROID) + option(${CHANNEL_OPTION} "Build ${CHANNEL_SHORT_NAME}" OFF) +else() + option(${CHANNEL_OPTION} "Build ${CHANNEL_SHORT_NAME}" ON) +endif() diff --git a/channels/disk/client/disk_file.h b/channels/disk/client/disk_file.h index 60147fc9b..70327cb8f 100644 --- a/channels/disk/client/disk_file.h +++ b/channels/disk/client/disk_file.h @@ -32,8 +32,12 @@ #include "statvfs.h" #else #include +#ifdef ANDROID +#include +#else #include #endif +#endif #ifdef _WIN32 #define STAT stat @@ -49,8 +53,8 @@ #define unlink(a) _unlink(a) #define ftruncate(a,b) _chsize(a,b) -typedef UINT32 ssize_t ; -typedef UINT32 mode_t ; +typedef UINT32 ssize_t; +typedef UINT32 mode_t; #elif defined(__APPLE__) || defined(__FreeBSD__) #define STAT stat diff --git a/channels/parallel/client/CMakeLists.txt b/channels/parallel/client/CMakeLists.txt index 3224d7cba..87b85f919 100644 --- a/channels/parallel/client/CMakeLists.txt +++ b/channels/parallel/client/CMakeLists.txt @@ -35,6 +35,7 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MODULE winpr MODULES winpr-interlocked) +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) install(TARGETS ${MODULE_NAME} DESTINATION ${FREERDP_PLUGIN_PATH}) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${MODULE_NAME}/Client") diff --git a/channels/serial/client/CMakeLists.txt b/channels/serial/client/CMakeLists.txt index 9024a58c0..f0e659351 100644 --- a/channels/serial/client/CMakeLists.txt +++ b/channels/serial/client/CMakeLists.txt @@ -32,6 +32,7 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MODULE freerdp MODULES freerdp-utils) +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) install(TARGETS ${MODULE_NAME} DESTINATION ${FREERDP_PLUGIN_PATH}) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${MODULE_NAME}/Client") diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 2812495b3..771b25474 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -22,14 +22,14 @@ if(NOT WIN32) add_subdirectory(Sample) # Build X11 Client - find_suggested_package(X11) if(WITH_X11) + find_suggested_package(X11) add_subdirectory(X11) endif() # Build DirectFB Client - find_optional_package(DirectFB) if(WITH_DIRECTFB) + find_optional_package(DirectFB) add_subdirectory(DirectFB) endif() else() diff --git a/libfreerdp/locale/CMakeLists.txt b/libfreerdp/locale/CMakeLists.txt index 25049946d..bb0490ef2 100644 --- a/libfreerdp/locale/CMakeLists.txt +++ b/libfreerdp/locale/CMakeLists.txt @@ -49,18 +49,21 @@ if(CMAKE_SYSTEM_NAME MATCHES Solaris) endif() if(NOT WIN32) - find_suggested_package(X11) if(WITH_X11) + find_suggested_package(X11) + add_definitions(-DWITH_X11) include_directories(${X11_INCLUDE_DIRS}) set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${MODULE_PREFIX}_X11_SRCS}) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${X11_LIBRARIES}) + if(WITH_SUN) add_definitions(-DWITH_SUN) set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${MODULE_PREFIX}_SUN_SRCS}) elseif(NOT APPLE) find_suggested_package(XKBFile) endif() + if(WITH_XKBFILE) add_definitions(-DWITH_XKBFILE) include_directories(${XKBFILE_INCLUDE_DIRS}) diff --git a/libfreerdp/utils/passphrase.c b/libfreerdp/utils/passphrase.c index 50d338166..35fd7dd65 100644 --- a/libfreerdp/utils/passphrase.c +++ b/libfreerdp/utils/passphrase.c @@ -23,13 +23,17 @@ #include #include + #ifdef _WIN32 + char* freerdp_passphrase_read(const char* prompt, char* buf, size_t bufsiz, int from_stdin) { - errno=ENOSYS; + errno = ENOSYS; return NULL; } -#else + +#elif (!ANDROID) + #include #include #include @@ -125,4 +129,13 @@ char* freerdp_passphrase_read(const char* prompt, char* buf, size_t bufsiz, int return NULL; } } + +#else + +char* freerdp_passphrase_read(const char* prompt, char* buf, size_t bufsiz, int from_stdin) +{ + return NULL; +} + #endif + diff --git a/libfreerdp/utils/signal.c b/libfreerdp/utils/signal.c index cc7e69365..14606f8bd 100644 --- a/libfreerdp/utils/signal.c +++ b/libfreerdp/utils/signal.c @@ -24,14 +24,19 @@ #include #include #include + #ifdef _WIN32 + #include + int freerdp_handle_signals(void) { errno = ENOSYS; return -1; } -#else + +#elif (!ANDROID) + volatile sig_atomic_t terminal_needs_reset = 0; int terminal_fildes = 0; struct termios orig_flags; @@ -117,4 +122,12 @@ int freerdp_handle_signals(void) pthread_sigmask(SIG_SETMASK, &orig_set, NULL); return 0; } + +#else + +int freerdp_handle_signals(void) +{ + return -1; +} + #endif diff --git a/winpr/libwinpr/crt/alignment.c b/winpr/libwinpr/crt/alignment.c index bc60d35a6..765b3d484 100644 --- a/winpr/libwinpr/crt/alignment.c +++ b/winpr/libwinpr/crt/alignment.c @@ -44,8 +44,12 @@ void* _aligned_malloc(size_t size, size_t alignment) if (alignment % 2 == 1) return NULL; +#ifdef ANDROID + memptr = memalign(alignment, size); +#else if (posix_memalign(&memptr, alignment, size) != 0) return NULL; +#endif return memptr; } @@ -83,8 +87,12 @@ void* _aligned_offset_malloc(size_t size, size_t alignment, size_t offset) if (alignment < sizeof(void*)) alignment = sizeof(void*); +#ifdef ANDROID + memptr = memalign(alignment, size); +#else if (posix_memalign(&memptr, alignment, size) != 0) return NULL; +#endif return memptr; } diff --git a/winpr/libwinpr/interlocked/interlocked.c b/winpr/libwinpr/interlocked/interlocked.c index 2fc887fa4..77ed94977 100644 --- a/winpr/libwinpr/interlocked/interlocked.c +++ b/winpr/libwinpr/interlocked/interlocked.c @@ -271,7 +271,29 @@ LONGLONG InterlockedCompareExchange64(LONGLONG volatile *Destination, LONGLONG E return previousValue; } -#else /* (_WIN32 && (_WIN32_WINNT < 0x0502)) */ +#elif ANDROID + +#include + +static pthread_mutex_t mutex; + +LONGLONG InterlockedCompareExchange64(LONGLONG volatile *Destination, LONGLONG Exchange, LONGLONG Comperand) +{ + LONGLONG previousValue = 0; + + pthread_mutex_lock(&mutex); + + previousValue = *Destination; + + if (*Destination == Comperand) + *Destination = Exchange; + + pthread_mutex_unlock(&mutex); + + return previousValue; +} + +#else LONGLONG InterlockedCompareExchange64(LONGLONG volatile *Destination, LONGLONG Exchange, LONGLONG Comperand) { @@ -282,7 +304,7 @@ LONGLONG InterlockedCompareExchange64(LONGLONG volatile *Destination, LONGLONG E #endif } -#endif /* (_WIN32 && (_WIN32_WINNT < 0x0502)) */ +#endif /* Doubly-Linked List */ diff --git a/winpr/libwinpr/thread/thread.c b/winpr/libwinpr/thread/thread.c index 9ce746c90..fc3b4fdcb 100644 --- a/winpr/libwinpr/thread/thread.c +++ b/winpr/libwinpr/thread/thread.c @@ -196,7 +196,9 @@ BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode) pthread_mutex_lock(&thread->mutex); +#ifndef ANDROID pthread_cancel(thread->thread); +#endif pthread_mutex_unlock(&thread->mutex);