[client,mac] Simplify builder
* Build MacFreeRDP as normal application, let the bundling out of building * Add a bunding script allowing to create a MacFreeRDP with all dependencies installed
This commit is contained in:
parent
1d06edb8d9
commit
dd56308bde
@ -12,36 +12,21 @@ endif()
|
|||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/)
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/)
|
||||||
include(PreventInSourceBuilds)
|
include(PreventInSourceBuilds)
|
||||||
|
|
||||||
set(MODULE_NAME "MacFreeRDP-library")
|
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
|
||||||
set(MODULE_OUTPUT_NAME "MacFreeRDP")
|
find_library(COCOA_LIBRARY Cocoa REQUIRED)
|
||||||
set(MODULE_PREFIX "FREERDP_CLIENT_MAC_LIBRARY")
|
find_library(APPKIT_LIBRARY AppKit REQUIRED)
|
||||||
|
find_library(IOKIT_LIBRARY IOKit REQUIRED)
|
||||||
|
find_library(COREGRAPHICS_LIBRARY CoreGraphics REQUIRED)
|
||||||
|
|
||||||
find_library(FOUNDATION_LIBRARY Foundation)
|
|
||||||
find_library(COCOA_LIBRARY Cocoa)
|
|
||||||
find_library(APPKIT_LIBRARY AppKit)
|
|
||||||
find_library(IOKIT_LIBRARY IOKit)
|
|
||||||
find_library(COREGRAPHICS_LIBRARY CoreGraphics)
|
|
||||||
|
|
||||||
mark_as_advanced(COCOA_LIBRARY FOUNDATION_LIBRARY APPKIT_LIBRARY)
|
|
||||||
set(EXTRA_LIBS ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY} ${IOKIT_LIBRARY})
|
set(EXTRA_LIBS ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY} ${IOKIT_LIBRARY})
|
||||||
|
|
||||||
string(TIMESTAMP VERSION_YEAR "%Y")
|
set(XIBS
|
||||||
set(MACOSX_BUNDLE_INFO_STRING "${MODULE_OUTPUT_NAME}")
|
|
||||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.freerdp.mac")
|
|
||||||
set(MACOSX_BUNDLE_BUNDLE_IDENTIFIER "FreeRDP-library.Mac")
|
|
||||||
set(MACOSX_BUNDLE_LONG_VERSION_STRING "MacFreeRDP library Version ${FREERDP_VERSION}")
|
|
||||||
set(MACOSX_BUNDLE_BUNDLE_NAME "${MODULE_OUTPUT_NAME}")
|
|
||||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${FREERDP_VERSION})
|
|
||||||
set(MACOSX_BUNDLE_BUNDLE_VERSION ${FREERDP_VERSION})
|
|
||||||
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2013-${VERSION_YEAR}. All Rights Reserved.")
|
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_XIBS
|
|
||||||
CertificateDialog.xib
|
CertificateDialog.xib
|
||||||
PasswordDialog.xib)
|
PasswordDialog.xib)
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_SOURCES "")
|
set(SOURCES "")
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_OBJECTIVE_SOURCES
|
set(OBJECTIVE_SOURCES
|
||||||
main.m
|
main.m
|
||||||
mf_client.m
|
mf_client.m
|
||||||
MRDPCursor.m
|
MRDPCursor.m
|
||||||
@ -51,9 +36,9 @@ set(${MODULE_PREFIX}_OBJECTIVE_SOURCES
|
|||||||
CertificateDialog.m
|
CertificateDialog.m
|
||||||
PasswordDialog.m)
|
PasswordDialog.m)
|
||||||
|
|
||||||
list(APPEND ${MODULE_PREFIX}_SOURCES ${${MODULE_PREFIX}_OBJECTIVE_SOURCES})
|
list(APPEND SOURCES ${OBJECTIVE_SOURCES})
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_HEADERS
|
set(HEADERS
|
||||||
mfreerdp.h
|
mfreerdp.h
|
||||||
mf_client.h
|
mf_client.h
|
||||||
MRDPCursor.h
|
MRDPCursor.h
|
||||||
@ -63,150 +48,58 @@ set(${MODULE_PREFIX}_HEADERS
|
|||||||
CertificateDialog.h
|
CertificateDialog.h
|
||||||
PasswordDialog.h)
|
PasswordDialog.h)
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_RESOURCES "en.lproj/InfoPlist.strings")
|
set(RESOURCES "en.lproj/InfoPlist.strings")
|
||||||
|
|
||||||
# Include XIB file in Xcode resources.
|
# Include XIB file in Xcode resources.
|
||||||
if("${CMAKE_GENERATOR}" MATCHES "Xcode")
|
if("${CMAKE_GENERATOR}" MATCHES "Xcode")
|
||||||
message(STATUS "Adding Xcode XIB resources for ${MODULE_NAME}")
|
message(STATUS "Adding Xcode XIB resources for ${MODULE_NAME}")
|
||||||
set(${MODULE_PREFIX}_RESOURCES ${${MODULE_PREFIX}_RESOURCES} ${${MODULE_PREFIX}_XIBS})
|
list(APPEND RESOURCES ${XIBS})
|
||||||
|
set(IS_XCODE ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(${MODULE_NAME}
|
|
||||||
SHARED
|
add_library(${PROJECT_NAME}
|
||||||
../common/client.c
|
../common/client.c
|
||||||
${${MODULE_PREFIX}_SOURCES}
|
${SOURCES}
|
||||||
${${MODULE_PREFIX}_HEADERS}
|
${HEADERS}
|
||||||
${${MODULE_PREFIX}_RESOURCES})
|
${RESOURCES})
|
||||||
|
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "${MODULE_OUTPUT_NAME}")
|
set(LIBS
|
||||||
|
${EXTRA_LIBS}
|
||||||
|
freerdp-client
|
||||||
|
)
|
||||||
|
|
||||||
# configures the framework to always be looked for in the application bundle in the Frameworks sub-folder.
|
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBS})
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_INSTALL_PATH @executable_path/../Frameworks/)
|
|
||||||
|
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES
|
set_target_properties(${PROJECT_NAME} PROPERTIES RESOURCE "${RESOURCES}")
|
||||||
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${EXECUTABLE_OUTPUT_PATH}
|
|
||||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${EXECUTABLE_OUTPUT_PATH})
|
|
||||||
|
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES
|
if (NOT IS_XCODE)
|
||||||
FRAMEWORK TRUE
|
find_program(IBTOOL ibtool REQUIRED
|
||||||
MACOSX_FRAMEWORK_IDENTIFIER com.awakecoding.${MODULE_NAME}
|
HINTS
|
||||||
FRAMEWORK_VERSION ${FREERDP_VERSION}
|
"/usr/bin"
|
||||||
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${FREERDP_VERSION}
|
"${OSX_DEVELOPER_ROOT}/usr/bin"
|
||||||
MACOSX_FRAMEWORK_BUNDLE_BUNDLE_VERSION ${FREERDP_VERSION}
|
)
|
||||||
INSTALL_NAME_DIR "@executable_path/../Frameworks"
|
|
||||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${EXTRA_LIBS} freerdp-client)
|
# Compile the .xib files using the 'ibtool' program with the destination being the app package
|
||||||
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp)
|
foreach(xib ${XIBS})
|
||||||
|
get_filename_component(XIB_WE ${xib} NAME_WE)
|
||||||
|
set(NIB ${CMAKE_CURRENT_BINARY_DIR}/${XIB_WE}.nib)
|
||||||
|
list(APPEND NIBS ${NIB})
|
||||||
|
|
||||||
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
|
add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
|
||||||
|
COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
|
||||||
|
--compile ${NIB} ${CMAKE_CURRENT_SOURCE_DIR}/${xib}
|
||||||
|
COMMENT "Compiling ${xib}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
# Set a list of the dependent targets used by the application. There should be a way to get this list automatically
|
install(FILES ${NIBS} DESTINATION ${CMAKE_INSTALL_DATADIR})
|
||||||
# from cmake, but for now I put it down manually. I got the references by calling "otool -L MacFreeRDP-client"
|
|
||||||
|
|
||||||
set(DEPENDENCIES "")
|
|
||||||
|
|
||||||
foreach(LIB ${${MODULE_PREFIX}_LIBS})
|
|
||||||
get_target_property(LOCATION ${LIB} LOCATION)
|
|
||||||
if(NOT ${LOCATION} MATCHES ".*-NOTFOUND")
|
|
||||||
list(APPEND DEPENDENCIES ${LIB})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Mac")
|
|
||||||
|
|
||||||
if(CMAKE_GENERATOR MATCHES "Ninja")
|
|
||||||
if (NOT ${CONFIGURATION} STREQUAL "")
|
|
||||||
set(safe_configuration "$CONFIGURATION")
|
|
||||||
else()
|
|
||||||
set(safe_configuration "")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
set(safe_configuration "$(CONFIGURATION)")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (${BUILD_SHARED_LIBS})
|
|
||||||
# Add a post-build event to copy the dependent libraries in the framework bundle
|
|
||||||
# Call install_name_tool to reassign the library install name
|
|
||||||
foreach(LIB ${DEPENDENCIES})
|
|
||||||
# message("adding post-build dependency: ${LIB}")
|
|
||||||
add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -E copy
|
|
||||||
"$<TARGET_FILE:${LIB}>"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
|
|
||||||
COMMENT "Copying ${LIB} to output directory"
|
|
||||||
COMMAND install_name_tool -change "$<TARGET_SONAME_FILE:${LIB}>"
|
|
||||||
"@executable_path/../Frameworks/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/${MODULE_OUTPUT_NAME}"
|
|
||||||
COMMENT Setting install name for ${LIB}
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -E echo install_name_tool -change "$<TARGET_SONAME_FILE:${LIB}>"
|
|
||||||
"@executable_path/../Frameworks/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/${MODULE_OUTPUT_NAME}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# Call install_name_tool to reassign the library install names in dependent libraries
|
install(TARGETS ${PROJECT_NAME}
|
||||||
foreach(DEST ${DEPENDENCIES})
|
COMPONENT client
|
||||||
foreach(LIB ${DEPENDENCIES})
|
RESOURCE DESTINATION ${CMAKE_INSTALL_DATADIR}
|
||||||
# message("adding post-build dependency: ${LIB}")
|
)
|
||||||
add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
|
|
||||||
COMMAND install_name_tool -change "$<TARGET_SONAME_FILE:${LIB}>"
|
|
||||||
"@executable_path/../Frameworks/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${DEST}>"
|
|
||||||
COMMENT Setting install name for ${LIB} in module ${DEST})
|
|
||||||
endforeach()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Add post-build NIB file generation in unix makefiles. XCode handles this implicitly.
|
|
||||||
# if(NOT "${CMAKE_GENERATOR}" MATCHES "Xcode")
|
|
||||||
message(STATUS "Adding post-build NIB file generation event for ${MODULE_NAME}")
|
|
||||||
|
|
||||||
# Make sure we can find the 'ibtool' program. If we can NOT find it we
|
|
||||||
# skip generation of this project
|
|
||||||
find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
|
|
||||||
if (${IBTOOL} STREQUAL "IBTOOL-NOTFOUND")
|
|
||||||
message(SEND_ERROR "ibtool can not be found and is needed to compile the .xib files. It should have been installed with
|
|
||||||
the Apple developer tools. The default system paths were searched in addition to ${OSX_DEVELOPER_ROOT}/usr/bin")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Make sure the 'Resources' Directory is correctly created before we build
|
|
||||||
add_custom_command(TARGET ${MODULE_NAME} PRE_BUILD
|
|
||||||
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/Versions/${MACOSX_BUNDLE_SHORT_VERSION_STRING}/Resources)
|
|
||||||
|
|
||||||
# Compile the .xib files using the 'ibtool' program with the destination being the app package
|
|
||||||
foreach(xib ${${MODULE_PREFIX}_XIBS})
|
|
||||||
get_filename_component(XIB_WE ${xib} NAME_WE)
|
|
||||||
|
|
||||||
add_custom_command (TARGET ${MODULE_NAME} POST_BUILD
|
|
||||||
COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
|
|
||||||
--compile ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/Versions/${MACOSX_BUNDLE_SHORT_VERSION_STRING}/Resources/${XIB_WE}.nib ${CMAKE_CURRENT_SOURCE_DIR}/${xib}
|
|
||||||
COMMENT "Compiling ${xib}")
|
|
||||||
endforeach()
|
|
||||||
# endif()
|
|
||||||
|
|
||||||
set(MAC_LIB_FRAMEWORK_HEADERS "")
|
|
||||||
# Copy the public header files into the framework
|
|
||||||
foreach(HEADER ${${MODULE_PREFIX}_HEADERS})
|
|
||||||
#message("adding post-build dependency: ${MODULE_NAME} ${HEADER}")
|
|
||||||
if( POLICY CMP0058 )
|
|
||||||
set(NinjaByproducts BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${CONFIGURATION}/${MODULE_OUTPUT_NAME}.framework/Headers/${HEADER})
|
|
||||||
endif()
|
|
||||||
add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
|
|
||||||
COMMAND ditto ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER} ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/Headers/
|
|
||||||
${NinjaByproducts}
|
|
||||||
COMMENT Copying public header files to ${MODULE_NAME})
|
|
||||||
list(APPEND MAC_LIB_FRAMEWORK_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${CONFIGURATION}/${MODULE_OUTPUT_NAME}.framework/Headers/${HEADER})
|
|
||||||
endforeach()
|
|
||||||
add_custom_target(
|
|
||||||
prepare-framework-headers
|
|
||||||
DEPENDS ${MAC_LIB_FRAMEWORK_HEADERS}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Copy the FreeRDP header files into the framework
|
|
||||||
add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
|
|
||||||
COMMAND ditto ${CMAKE_SOURCE_DIR}/include/freerdp ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.framework/Headers/freerdp
|
|
||||||
COMMAND ditto ${CMAKE_SOURCE_DIR}/winpr/include/winpr ${CMAKE_CURRENT_BINARY_DIR}/${CONFIGURATION}/${MODULE_OUTPUT_NAME}.framework/Headers/winpr
|
|
||||||
COMMENT Copying FreeRDP header files to ${MODULE_NAME})
|
|
||||||
|
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
add_subdirectory(cli)
|
add_subdirectory(cli)
|
||||||
|
@ -721,10 +721,10 @@ DWORD fixKeyCode(DWORD keyCode, unichar keyChar, enum APPLE_KEYBOARD_TYPE type)
|
|||||||
|
|
||||||
formatString = [[NSString alloc] initWithData:formatData encoding:NSUTF8StringEncoding];
|
formatString = [[NSString alloc] initWithData:formatData encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
const char *data = [formatString UTF8String];
|
const char *data = [formatString cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
const size_t size = strlen(data) + 1;
|
const size_t dataLen = [formatString lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
|
||||||
formatId = ClipboardRegisterFormat(mfc->clipboard, "text/plain");
|
formatId = ClipboardRegisterFormat(mfc->clipboard, "text/plain");
|
||||||
ClipboardSetData(mfc->clipboard, formatId, data, size);
|
ClipboardSetData(mfc->clipboard, formatId, data, dataLen + 1);
|
||||||
[formatString release];
|
[formatString release];
|
||||||
|
|
||||||
formatMatch = TRUE;
|
formatMatch = TRUE;
|
||||||
@ -950,6 +950,13 @@ static BOOL mac_show_auth_dialog(MRDPView *view, NSString *title, char **usernam
|
|||||||
if (*domain)
|
if (*domain)
|
||||||
dialog.domain = [NSString stringWithCString:*domain encoding:NSUTF8StringEncoding];
|
dialog.domain = [NSString stringWithCString:*domain encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
free(*username);
|
||||||
|
free(*password);
|
||||||
|
free(*domain);
|
||||||
|
*username = NULL;
|
||||||
|
*password = NULL;
|
||||||
|
*domain = NULL;
|
||||||
|
|
||||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||||
[dialog performSelectorOnMainThread:@selector(runModal:)
|
[dialog performSelectorOnMainThread:@selector(runModal:)
|
||||||
withObject:[view window]
|
withObject:[view window]
|
||||||
@ -959,31 +966,33 @@ static BOOL mac_show_auth_dialog(MRDPView *view, NSString *title, char **usernam
|
|||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
size_t ulen, plen, dlen;
|
|
||||||
const char *submittedUsername = [dialog.username cStringUsingEncoding:NSUTF8StringEncoding];
|
const char *submittedUsername = [dialog.username cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
ulen = (strlen(submittedUsername) + 1) * sizeof(char);
|
const size_t submittedUsernameLen =
|
||||||
*username = malloc(ulen);
|
[dialog.username lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
if (submittedUsername && (submittedUsernameLen > 0))
|
||||||
|
*username = strndup(submittedUsername, submittedUsernameLen);
|
||||||
|
|
||||||
if (!(*username))
|
if (!(*username))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
sprintf_s(*username, ulen, "%s", submittedUsername);
|
|
||||||
const char *submittedPassword = [dialog.password cStringUsingEncoding:NSUTF8StringEncoding];
|
const char *submittedPassword = [dialog.password cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
plen = (strlen(submittedPassword) + 1) * sizeof(char);
|
const size_t submittedPasswordLen =
|
||||||
*password = malloc(plen);
|
[dialog.password lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
if (submittedPassword && (submittedPasswordLen > 0))
|
||||||
|
*password = strndup(submittedPassword, submittedPasswordLen);
|
||||||
|
|
||||||
if (!(*password))
|
if (!(*password))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
sprintf_s(*password, plen, "%s", submittedPassword);
|
|
||||||
const char *submittedDomain = [dialog.domain cStringUsingEncoding:NSUTF8StringEncoding];
|
const char *submittedDomain = [dialog.domain cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
dlen = (strlen(submittedDomain) + 1) * sizeof(char);
|
const size_t submittedDomainLen =
|
||||||
*domain = malloc(dlen);
|
[dialog.domain lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
if (submittedDomain && (submittedDomainLen > 0))
|
||||||
if (!(*domain))
|
{
|
||||||
return FALSE;
|
*domain = strndup(submittedDomain, submittedDomainLen);
|
||||||
|
if (!(*domain))
|
||||||
sprintf_s(*domain, dlen, "%s", submittedDomain);
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
|
@ -79,8 +79,12 @@
|
|||||||
[self.usernameText.stringValue cStringUsingEncoding:NSUTF8StringEncoding],
|
[self.usernameText.stringValue cStringUsingEncoding:NSUTF8StringEncoding],
|
||||||
&submittedUser, &submittedDomain))
|
&submittedUser, &submittedDomain))
|
||||||
{
|
{
|
||||||
self.username = [NSString stringWithCString:submittedUser encoding:NSUTF8StringEncoding];
|
if (submittedUser)
|
||||||
self.domain = [NSString stringWithCString:submittedDomain encoding:NSUTF8StringEncoding];
|
self.username = [NSString stringWithCString:submittedUser
|
||||||
|
encoding:NSUTF8StringEncoding];
|
||||||
|
if (submittedDomain)
|
||||||
|
self.domain = [NSString stringWithCString:submittedDomain
|
||||||
|
encoding:NSUTF8StringEncoding];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -88,6 +92,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.password = self.passwordText.stringValue;
|
self.password = self.passwordText.stringValue;
|
||||||
|
free(submittedUser);
|
||||||
|
free(submittedDomain);
|
||||||
[NSApp stopModalWithCode:TRUE];
|
[NSApp stopModalWithCode:TRUE];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import <MacFreeRDP/MRDPView.h>
|
#import <MRDPView.h>
|
||||||
#import <MacFreeRDP/mfreerdp.h>
|
#import <mfreerdp.h>
|
||||||
|
|
||||||
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
||||||
{
|
{
|
||||||
|
@ -7,9 +7,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegate.h"
|
||||||
#import "MacFreeRDP/mfreerdp.h"
|
#import <mfreerdp.h>
|
||||||
#import "MacFreeRDP/mf_client.h"
|
#import <mf_client.h>
|
||||||
#import "MacFreeRDP/MRDPView.h"
|
#import <MRDPView.h>
|
||||||
|
|
||||||
#import <winpr/assert.h>
|
#import <winpr/assert.h>
|
||||||
#import <freerdp/client/cmdline.h>
|
#import <freerdp/client/cmdline.h>
|
||||||
|
@ -4,14 +4,10 @@ project(MacFreeRDP)
|
|||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/)
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/)
|
||||||
include(PreventInSourceBuilds)
|
include(PreventInSourceBuilds)
|
||||||
|
|
||||||
set(MODULE_NAME "MacFreeRDP")
|
|
||||||
set(MODULE_OUTPUT_NAME "MacFreeRDP")
|
|
||||||
set(MODULE_PREFIX "FREERDP_CLIENT_MAC_CLIENT")
|
|
||||||
|
|
||||||
# Import libraries
|
# Import libraries
|
||||||
find_library(FOUNDATION_LIBRARY Foundation)
|
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
|
||||||
find_library(COCOA_LIBRARY Cocoa)
|
find_library(COCOA_LIBRARY Cocoa REQUIRED)
|
||||||
find_library(APPKIT_LIBRARY AppKit)
|
find_library(APPKIT_LIBRARY AppKit REQUIRED)
|
||||||
|
|
||||||
string(TIMESTAMP VERSION_YEAR "%Y")
|
string(TIMESTAMP VERSION_YEAR "%Y")
|
||||||
set(MACOSX_BUNDLE_INFO_STRING "MacFreeRDP")
|
set(MACOSX_BUNDLE_INFO_STRING "MacFreeRDP")
|
||||||
@ -27,102 +23,76 @@ set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2013-${VERSION_YEAR}. All Rights Reserved
|
|||||||
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "MainMenu")
|
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "MainMenu")
|
||||||
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication")
|
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication")
|
||||||
|
|
||||||
mark_as_advanced(COCOA_LIBRARY FOUNDATION_LIBRARY APPKIT_LIBRARY)
|
set(XIBS MainMenu.xib)
|
||||||
set(APP_TYPE MACOSX_BUNDLE)
|
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_XIBS MainMenu.xib)
|
set(SOURCES "")
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_SOURCES "")
|
set(OBJECTIVE_SOURCES
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_OBJECTIVE_SOURCES
|
|
||||||
main.m
|
main.m
|
||||||
AppDelegate.m)
|
AppDelegate.m
|
||||||
|
)
|
||||||
|
|
||||||
list(APPEND ${MODULE_PREFIX}_SOURCES ${${MODULE_PREFIX}_OBJECTIVE_SOURCES})
|
list(APPEND SOURCES ${OBJECTIVE_SOURCES})
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_HEADERS
|
set(HEADERS
|
||||||
AppDelegate.h)
|
AppDelegate.h
|
||||||
|
)
|
||||||
set(${MODULE_PREFIX}_RESOURCES ${MACOSX_BUNDLE_ICON_FILE})
|
|
||||||
|
|
||||||
|
set(RESOURCES
|
||||||
|
"en.lproj/InfoPlist.strings"
|
||||||
|
${MACOSX_BUNDLE_ICON_FILE}
|
||||||
|
)
|
||||||
# Include XIB file in Xcode resources.
|
# Include XIB file in Xcode resources.
|
||||||
if("${CMAKE_GENERATOR}" MATCHES "Xcode")
|
if("${CMAKE_GENERATOR}" MATCHES "Xcode")
|
||||||
message(STATUS "Adding Xcode XIB resources for ${MODULE_NAME}")
|
message(STATUS "Adding Xcode XIB resources for ${MODULE_NAME}")
|
||||||
set(${MODULE_PREFIX}_RESOURCES ${${MODULE_PREFIX}_RESOURCES} ${${MODULE_PREFIX}_XIBS})
|
list(APPEND RESOURCES ${XIBS})
|
||||||
|
set(IS_XCODE ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_executable(${MODULE_NAME}
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in ${CMAKE_CURRENT_BINARY_DIR}/Info.plist @ONLY)
|
||||||
${APP_TYPE}
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/PkgInfo.in ${CMAKE_CURRENT_BINARY_DIR}/PkgInfo @ONLY)
|
||||||
${${MODULE_PREFIX}_HEADERS}
|
|
||||||
${${MODULE_PREFIX}_SOURCES}
|
|
||||||
${${MODULE_PREFIX}_RESOURCES})
|
|
||||||
|
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "${MODULE_OUTPUT_NAME}")
|
add_executable(${PROJECT_NAME}
|
||||||
add_dependencies(${MODULE_NAME} prepare-framework-headers)
|
${HEADERS}
|
||||||
|
${SOURCES}
|
||||||
|
${RESOURCES})
|
||||||
|
|
||||||
# This is necessary for the xib file part below
|
set_target_properties(${PROJECT_NAME} PROPERTIES RESOURCE "${RESOURCES}")
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Info.plist ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
||||||
|
|
||||||
# This allows for automatic xib to nib ibitool
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES RESOURCE "${${MODULE_PREFIX}_RESOURCES}")
|
${COCOA_LIBRARY}
|
||||||
|
${FOUNDATION_LIBRARY}
|
||||||
|
${APPKIT_LIBRARY}
|
||||||
|
MacFreeRDP-library
|
||||||
|
)
|
||||||
|
|
||||||
# Tell the compiler where to look for the FreeRDP framework
|
if (NOT IS_XCODE)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -F../")
|
find_program(IBTOOL ibtool REQUIRED
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -F../")
|
HINTS
|
||||||
|
"/usr/bin"
|
||||||
|
"${OSX_DEVELOPER_ROOT}/usr/bin"
|
||||||
|
)
|
||||||
|
|
||||||
if(CMAKE_GENERATOR MATCHES "Ninja")
|
# Compile the .xib files using the 'ibtool' program with the destination being the app package
|
||||||
if (NOT ${CONFIGURATION} STREQUAL "")
|
|
||||||
set(safe_configuration "$CONFIGURATION")
|
foreach(xib ${XIBS})
|
||||||
else()
|
get_filename_component(XIB_WE ${xib} NAME_WE)
|
||||||
set(safe_configuration "")
|
set(NIB ${CMAKE_CURRENT_BINARY_DIR}/${XIB_WE}.nib)
|
||||||
endif()
|
list(APPEND NIBS ${NIB})
|
||||||
else()
|
|
||||||
set(safe_configuration "$(CONFIGURATION)")
|
add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
|
||||||
|
COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
|
||||||
|
--compile ${NIB} ${CMAKE_CURRENT_SOURCE_DIR}/${xib}
|
||||||
|
COMMENT "Compiling ${xib}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
install(FILES ${NIBS} DESTINATION ${CMAKE_INSTALL_DATADIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tell XCode where to look for the MacFreeRDP framework
|
install(TARGETS ${PROJECT_NAME}
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS
|
COMPONENT client
|
||||||
"${XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS} ${CMAKE_CURRENT_BINARY_DIR}/../${safe_configuration}")
|
RESOURCE DESTINATION ${CMAKE_INSTALL_DATADIR}
|
||||||
|
)
|
||||||
# Set the info plist to the custom instance
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Info.plist DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
set_target_properties(${MODULE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/PkgInfo DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
||||||
# Disable transitive linking
|
|
||||||
target_link_libraries(${MODULE_NAME} ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY} MacFreeRDP-library)
|
|
||||||
|
|
||||||
set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Mac")
|
|
||||||
|
|
||||||
# Embed the FreeRDP framework into the app bundle
|
|
||||||
add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
|
|
||||||
COMMAND mkdir ARGS -p ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.app/Contents/Frameworks
|
|
||||||
COMMAND ditto ${CMAKE_CURRENT_BINARY_DIR}/../${safe_configuration}/MacFreeRDP.framework ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.app/Contents/Frameworks/MacFreeRDP.framework
|
|
||||||
COMMAND install_name_tool -change "@executable_path/../Frameworks/MacFreeRDP.framework/Versions/${MAC_OS_X_BUNDLE_BUNDLE_VERSION}/MacFreeRDP"
|
|
||||||
"@executable_path/../Frameworks/MacFreeRDP.framework/Versions/Current/MacFreeRDP"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.app/Contents/MacOS/${MODULE_NAME}"
|
|
||||||
COMMENT Setting install name for MacFreeRDP)
|
|
||||||
|
|
||||||
# Add post-build NIB file generation in unix makefiles. XCode handles this implicitly.
|
|
||||||
if(NOT "${CMAKE_GENERATOR}" MATCHES "Xcode")
|
|
||||||
message(STATUS "Adding post-build NIB file generation event for ${MODULE_NAME}")
|
|
||||||
|
|
||||||
# Make sure we can find the 'ibtool' program. If we can NOT find it we skip generation of this project
|
|
||||||
find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
|
|
||||||
if (${IBTOOL} STREQUAL "IBTOOL-NOTFOUND")
|
|
||||||
message(SEND_ERROR "ibtool can not be found and is needed to compile the .xib files. It should have been installed with
|
|
||||||
the Apple developer tools. The default system paths were searched in addition to ${OSX_DEVELOPER_ROOT}/usr/bin")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Make sure the 'Resources' Directory is correctly created before we build
|
|
||||||
add_custom_command(TARGET ${MODULE_NAME} PRE_BUILD COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.app/Contents/Resources)
|
|
||||||
|
|
||||||
# Compile the .xib files using the 'ibtool' program with the destination being the app package
|
|
||||||
foreach(xib ${${MODULE_PREFIX}_XIBS})
|
|
||||||
get_filename_component(XIB_WE ${xib} NAME_WE)
|
|
||||||
|
|
||||||
add_custom_command (TARGET ${MODULE_NAME} POST_BUILD
|
|
||||||
COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
|
|
||||||
--compile ${CMAKE_CURRENT_BINARY_DIR}/${safe_configuration}/${MODULE_OUTPUT_NAME}.app/Contents/Resources/${XIB_WE}.nib ${CMAKE_CURRENT_SOURCE_DIR}/${xib}
|
|
||||||
COMMENT "Compiling ${xib}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
1
client/Mac/cli/PkgInfo.in
Normal file
1
client/Mac/cli/PkgInfo.in
Normal file
@ -0,0 +1 @@
|
|||||||
|
APPL????
|
@ -3,7 +3,8 @@ set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|||||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
||||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(CMAKE_INSTALL_RPATH "@loader_path/../Frameworks")
|
file(RELATIVE_PATH FRAMEWORK_PATH ${CMAKE_INSTALL_FULL_BINDIR} ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
set(CMAKE_INSTALL_RPATH "@loader_path/${FRAMEWORK_PATH}")
|
||||||
else (APPLE)
|
else (APPLE)
|
||||||
if (NOT FREEBSD)
|
if (NOT FREEBSD)
|
||||||
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
|
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
|
||||||
|
134
scripts/bundle-mac-os.sh
Executable file
134
scripts/bundle-mac-os.sh
Executable file
@ -0,0 +1,134 @@
|
|||||||
|
#!/bin/bash -xe
|
||||||
|
SCRIPT_PATH="$(dirname -- "${BASH_SOURCE[0]}")" # relative
|
||||||
|
SCRIPT_PATH="$(cd -- "$SCRIPT_PATH" && pwd)" # absolutized and normalized
|
||||||
|
|
||||||
|
BASE=$(pwd)
|
||||||
|
SRC="$BASE/src"
|
||||||
|
BUILD="$BASE/build"
|
||||||
|
INSTALL="$BASE/install/MacFreeRDP.app/Contents"
|
||||||
|
|
||||||
|
BINDIR=MacOS
|
||||||
|
LIBDIR=Frameworks
|
||||||
|
DATADIR=Resources
|
||||||
|
|
||||||
|
OSSL_FLAGS="-arch arm64 -arch x86_64"
|
||||||
|
|
||||||
|
CMAKE_ARGS="-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
|
||||||
|
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DBUILD_SHARED_LIBS=ON \
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES='arm64;x86_64' \
|
||||||
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=12 \
|
||||||
|
-DCMAKE_INSTALL_PREFIX='$INSTALL' \
|
||||||
|
-DCMAKE_INSTALL_LIBDIR='$LIBDIR' \
|
||||||
|
-DCMAKE_INSTALL_BINDIR='$BINDIR' \
|
||||||
|
-DCMAKE_INSTALL_DATADIR='$DATADIR' \
|
||||||
|
-DINSTALL_LIB_DIR='$INSTALL/$LIBDIR' \
|
||||||
|
-DINSTALL_BIN_DIR='$INSTALL/$BINDIR' \
|
||||||
|
-DCMAKE_PREFIX_PATH='$INSTALL;$INSTALL/$LIBDIR;$INSTALL/$LIBDIR/cmake' \
|
||||||
|
-DCMAKE_IGNORE_PATH='/opt/local;/usr/local;/opt/homebrew'
|
||||||
|
"
|
||||||
|
|
||||||
|
if [ ! -d $SRC ];
|
||||||
|
then
|
||||||
|
mkdir -p $SRC
|
||||||
|
cd $SRC
|
||||||
|
git clone -b openssl-3.2.0 https://github.com/openssl/openssl.git
|
||||||
|
git clone --depth 1 -b v1.3 https://github.com/madler/zlib.git
|
||||||
|
git clone --depth 1 -b uriparser-0.9.7 https://github.com/uriparser/uriparser.git
|
||||||
|
git clone --depth 1 -b v1.7.16 https://github.com/DaveGamble/cJSON.git
|
||||||
|
git clone --depth 1 -b release-2.28.1 https://github.com/libsdl-org/SDL.git
|
||||||
|
git clone --depth 1 --shallow-submodules --recurse-submodules -b release-2.20.2 https://github.com/libsdl-org/SDL_ttf.git
|
||||||
|
git clone --depth 1 --shallow-submodules --recurse-submodules -b v1.0.26 https://github.com/libusb/libusb-cmake.git
|
||||||
|
git clone --depth 1 -b n6.0 https://github.com/FFmpeg/FFmpeg.git
|
||||||
|
git clone --depth 1 -b v2.4.0 https://github.com/cisco/openh264.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $INSTALL ];
|
||||||
|
then
|
||||||
|
rm -rf $INSTALL
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $BUILD ];
|
||||||
|
then
|
||||||
|
rm -rf $BUILD
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p $BUILD
|
||||||
|
cd $BUILD
|
||||||
|
|
||||||
|
cmake -GNinja -Bzlib -S$SRC/zlib $CMAKE_ARGS
|
||||||
|
cmake --build zlib
|
||||||
|
cmake --install zlib
|
||||||
|
|
||||||
|
cmake -GNinja -Buriparser -S$SRC/uriparser $CMAKE_ARGS -DURIPARSER_BUILD_DOCS=OFF -DURIPARSER_BUILD_TESTS=OFF
|
||||||
|
cmake --build uriparser
|
||||||
|
cmake --install uriparser
|
||||||
|
|
||||||
|
cmake -GNinja -BcJSON -S$SRC/cJSON $CMAKE_ARGS -DENABLE_CJSON_TEST=OFF -DBUILD_SHARED_AND_STATIC_LIBS=OFF
|
||||||
|
cmake --build cJSON
|
||||||
|
cmake --install cJSON
|
||||||
|
|
||||||
|
cmake -GNinja -BSDL -S$SRC/SDL $CMAKE_ARGS -DSDL_TEST=OFF -DSDL_TESTS=OFF -DSDL_STATIC_PIC=ON
|
||||||
|
cmake --build SDL
|
||||||
|
cmake --install SDL
|
||||||
|
|
||||||
|
cmake -GNinja -BSDL_ttf -S$SRC/SDL_ttf $CMAKE_ARGS -DSDL2TTF_HARFBUZZ=ON -DSDL2TTF_FREETYPE=ON -DSDL2TTF_VENDORED=ON \
|
||||||
|
-DFT_DISABLE_ZLIB=OFF -DSDL2TTF_SAMPLES=OFF
|
||||||
|
cmake --build SDL_ttf
|
||||||
|
cmake --install SDL_ttf
|
||||||
|
|
||||||
|
cmake -GNinja -Blibusb-cmake -S$SRC/libusb-cmake $CMAKE_ARGS -DLIBUSB_BUILD_EXAMPLES=OFF -DLIBUSB_BUILD_TESTING=OFF \
|
||||||
|
-DLIBUSB_ENABLE_DEBUG_LOGGING=OFF -DLIBUSB_BUILD_SHARED_LIBS=ON
|
||||||
|
cmake --build libusb-cmake
|
||||||
|
cmake --install libusb-cmake
|
||||||
|
|
||||||
|
mkdir -p openssl
|
||||||
|
cd openssl
|
||||||
|
|
||||||
|
CFLAGS=$OSSL_FLAGS LDFLAGS=$OSSL_FLAGS $SRC/openssl/config --prefix=$INSTALL --libdir=$LIBDIR no-asm no-tests no-docs no-apps zlib
|
||||||
|
CFLAGS=$OSSL_FLAGS LDFLAGS=$OSSL_FLAGS make -j build_sw
|
||||||
|
CFLAGS=$OSSL_FLAGS LDFLAGS=$OSSL_FLAGS make -j install_sw
|
||||||
|
|
||||||
|
cd $BUILD
|
||||||
|
|
||||||
|
meson setup --prefix="$INSTALL" -Doptimization=3 -Db_lto=true -Db_pie=true -Dc_args="$OSSL_FLAGS" -Dc_link_args="$OSSL_FLAGS" \
|
||||||
|
-Dcpp_args="$OSSL_FLAGS" -Dcpp_link_args="$OSSL_FLAGS" -Dpkgconfig.relocatable=true -Dtests=disabled -Dbindir=$BINDIR \
|
||||||
|
-Dlibdir=$LIBDIR openh264 $SRC/openh264
|
||||||
|
ninja -C openh264 install
|
||||||
|
|
||||||
|
cmake -GNinja -Bfreerdp -S"$SCRIPT_PATH/.." $CMAKE_ARGS -DWITH_PLATFORM_SERVER=OFF -DWITH_NEON=OFF -DWITH_SSE=OFF -DWITH_FFMPEG=OFF \
|
||||||
|
-DWITH_SWSCALE=OFF -DWITH_OPUS=OFF -DWITH_WEBVIEW=OFF
|
||||||
|
cmake --build freerdp
|
||||||
|
cmake --install freerdp
|
||||||
|
|
||||||
|
# some build systems do not handle @rpath on mac os correctly.
|
||||||
|
# do check that and fix it.
|
||||||
|
DYLIB_ABS_NAMES=$(find $INSTALL/$LIBDIR -name "*.dylib")
|
||||||
|
for DYLIB_ABS in $DYLIB_ABS_NAMES;
|
||||||
|
do
|
||||||
|
DYLIB_NAME=$(basename $DYLIB_ABS)
|
||||||
|
install_name_tool -id @rpath/$DYLIB_NAME $DYLIB_ABS
|
||||||
|
|
||||||
|
for DYLIB_DEP in $(otool -L $DYLIB_ABS | grep "$INSTALL/$LIBDIR" | cut -d' ' -f1);
|
||||||
|
do
|
||||||
|
if [[ $DYLIB_DEP == $DYLIB_ABS ]];
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
elif [[ $DYLIB_DEP == $INSTALL/$LIBDIR/* ]];
|
||||||
|
then
|
||||||
|
DEP_BASE=$(basename $DYLIB_DEP)
|
||||||
|
install_name_tool -change $DYLIB_DEP @rpath/$DEP_BASE $DYLIB_ABS
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# clean up unused data
|
||||||
|
rm -rf "$INSTALL/include"
|
||||||
|
rm -rf "$INSTALL/share"
|
||||||
|
rm -rf "$INSTALL/bin"
|
||||||
|
rm -rf "$INSTALL/$LIBDIR/cmake"
|
||||||
|
rm -rf "$INSTALL/$LIBDIR/pkgconfig"
|
||||||
|
rm -f "$INSTALL/$LIBDIR/*.a"
|
||||||
|
|
||||||
|
# TODO: Create remaining files required
|
Loading…
Reference in New Issue
Block a user