Blame client/Mac/CMakeLists.txt

Packit 1fb8d4
Packit 1fb8d4
project(MacFreeRDP-library)
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
if(${CMAKE_VERSION} GREATER 2.8.12)
Packit 1fb8d4
	cmake_policy(SET CMP0026 OLD)
Packit 1fb8d4
	cmake_policy(SET CMP0045 OLD)
Packit 1fb8d4
endif()
Packit 1fb8d4
Packit 1fb8d4
set(MODULE_NAME "MacFreeRDP-library")
Packit 1fb8d4
set(MODULE_OUTPUT_NAME "MacFreeRDP")
Packit 1fb8d4
set(MODULE_PREFIX "FREERDP_CLIENT_MAC_LIBRARY")
Packit 1fb8d4
Packit 1fb8d4
find_library(FOUNDATION_LIBRARY Foundation)
Packit 1fb8d4
find_library(COCOA_LIBRARY Cocoa)
Packit 1fb8d4
find_library(APPKIT_LIBRARY AppKit)
Packit 1fb8d4
find_library(IOKIT_LIBRARY IOKit)
Packit Service 5a9772
find_library(COREGRAPHICS_LIBRARY CoreGraphics)
Packit 1fb8d4
Packit 1fb8d4
mark_as_advanced(COCOA_LIBRARY FOUNDATION_LIBRARY APPKIT_LIBRARY)
Packit 1fb8d4
set(EXTRA_LIBS ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY} ${IOKIT_LIBRARY})
Packit 1fb8d4
Packit Service 5a9772
string(TIMESTAMP VERSION_YEAR "%Y")
Packit 1fb8d4
set(MACOSX_BUNDLE_INFO_STRING "${MODULE_OUTPUT_NAME}")
Packit 1fb8d4
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.freerdp.mac")
Packit 1fb8d4
set(MACOSX_BUNDLE_BUNDLE_IDENTIFIER "FreeRDP-library.Mac")
Packit Service 5a9772
set(MACOSX_BUNDLE_LONG_VERSION_STRING "MacFreeRDP library Version ${FREERDP_VERSION}")
Packit 1fb8d4
set(MACOSX_BUNDLE_BUNDLE_NAME "${MODULE_OUTPUT_NAME}")
Packit Service 5a9772
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${FREERDP_VERSION})
Packit Service 5a9772
set(MACOSX_BUNDLE_BUNDLE_VERSION ${FREERDP_VERSION})
Packit Service 5a9772
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2013-${VERSION_YEAR}. All Rights Reserved.")
Packit 1fb8d4
Packit Service 5a9772
set(${MODULE_PREFIX}_XIBS
Packit Service 5a9772
	CertificateDialog.xib
Packit Service 5a9772
	PasswordDialog.xib)
Packit 1fb8d4
Packit 1fb8d4
set(${MODULE_PREFIX}_SOURCES "")
Packit 1fb8d4
Packit 1fb8d4
set(${MODULE_PREFIX}_OBJECTIVE_SOURCES
Packit 1fb8d4
	main.m
Packit 1fb8d4
	mf_client.m
Packit 1fb8d4
	MRDPCursor.m
Packit 1fb8d4
	MRDPView.m
Packit 1fb8d4
	Keyboard.m
Packit 1fb8d4
	Clipboard.m
Packit Service 5a9772
	CertificateDialog.m
Packit 1fb8d4
	PasswordDialog.m)
Packit 1fb8d4
Packit 1fb8d4
list(APPEND ${MODULE_PREFIX}_SOURCES ${${MODULE_PREFIX}_OBJECTIVE_SOURCES})
Packit 1fb8d4
Packit 1fb8d4
set(${MODULE_PREFIX}_HEADERS
Packit 1fb8d4
	mfreerdp.h
Packit 1fb8d4
	mf_client.h
Packit 1fb8d4
	MRDPCursor.h
Packit 1fb8d4
	MRDPView.h
Packit 1fb8d4
	Keyboard.h
Packit 1fb8d4
	Clipboard.h
Packit Service 5a9772
	CertificateDialog.h
Packit 1fb8d4
	PasswordDialog.h)
Packit 1fb8d4
Packit 1fb8d4
set(${MODULE_PREFIX}_RESOURCES "en.lproj/InfoPlist.strings")
Packit 1fb8d4
Packit 1fb8d4
# Include XIB file in Xcode resources. 
Packit 1fb8d4
if("${CMAKE_GENERATOR}" MATCHES "Xcode")
Packit 1fb8d4
	message(STATUS "Adding Xcode XIB resources for ${MODULE_NAME}")
Packit 1fb8d4
	set(${MODULE_PREFIX}_RESOURCES ${${MODULE_PREFIX}_RESOURCES} ${${MODULE_PREFIX}_XIBS})
Packit 1fb8d4
endif()
Packit 1fb8d4
Packit 1fb8d4
add_library(${MODULE_NAME}
Packit 1fb8d4
	SHARED
Packit 1fb8d4
	../common/client.c
Packit 1fb8d4
	${${MODULE_PREFIX}_SOURCES}
Packit 1fb8d4
	${${MODULE_PREFIX}_HEADERS}
Packit 1fb8d4
	${${MODULE_PREFIX}_RESOURCES})
Packit 1fb8d4
Packit 1fb8d4
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "${MODULE_OUTPUT_NAME}")
Packit 1fb8d4
Packit 1fb8d4
# configures the framework to always be looked for in the application bundle in the Frameworks sub-folder.
Packit 1fb8d4
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_INSTALL_PATH @executable_path/../Frameworks/)
Packit 1fb8d4
          
Packit 1fb8d4
set_target_properties(${MODULE_NAME} PROPERTIES
Packit 1fb8d4
	RUNTIME_OUTPUT_DIRECTORY_DEBUG ${EXECUTABLE_OUTPUT_PATH} 
Packit 1fb8d4
	RUNTIME_OUTPUT_DIRECTORY_RELEASE ${EXECUTABLE_OUTPUT_PATH})
Packit 1fb8d4
Packit 1fb8d4
set_target_properties(${MODULE_NAME} PROPERTIES 
Packit 1fb8d4
	FRAMEWORK TRUE
Packit 1fb8d4
	MACOSX_FRAMEWORK_IDENTIFIER com.awakecoding.${MODULE_NAME}
Packit Service 5a9772
	FRAMEWORK_VERSION ${FREERDP_VERSION}
Packit Service 5a9772
	MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${FREERDP_VERSION}
Packit Service 5a9772
	MACOSX_FRAMEWORK_BUNDLE_BUNDLE_VERSION ${FREERDP_VERSION}
Packit 1fb8d4
	INSTALL_NAME_DIR "@executable_path/../Frameworks"
Packit 1fb8d4
	MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
Packit 1fb8d4
Packit 1fb8d4
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${EXTRA_LIBS} freerdp-client)
Packit 1fb8d4
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp)
Packit 1fb8d4
Packit 1fb8d4
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
Packit 1fb8d4
Packit 1fb8d4
# Set a list of the dependent targets used by the application. There should be a way to get this list automatically
Packit 1fb8d4
# from cmake, but for now I put it down manually. I got the references by calling "otool -L MacFreeRDP-client"
Packit 1fb8d4
Packit 1fb8d4
set(DEPENDENCIES "")
Packit 1fb8d4
Packit 1fb8d4
foreach(LIB ${${MODULE_PREFIX}_LIBS})
Packit 1fb8d4
	get_target_property(LOCATION ${LIB} LOCATION)
Packit 1fb8d4
	if(NOT ${LOCATION} MATCHES ".*-NOTFOUND")
Packit 1fb8d4
		list(APPEND DEPENDENCIES ${LIB})
Packit 1fb8d4
	endif()
Packit 1fb8d4
endforeach()
Packit 1fb8d4
Packit 1fb8d4
set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Mac")
Packit 1fb8d4
Packit 1fb8d4
if (${BUILD_SHARED_LIBS})
Packit 1fb8d4
	# Add a post-build event to copy the dependent libraries in the framework bundle 
Packit 1fb8d4
	# Call install_name_tool to reassign the library install name
Packit 1fb8d4
	foreach(LIB ${DEPENDENCIES})
Packit 1fb8d4
		# message("adding post-build dependency: ${LIB}")
Packit 1fb8d4
		add_custom_command(TARGET ${MODULE_NAME} POST_BUILD 
Packit 1fb8d4
			COMMAND "${CMAKE_COMMAND}" -E copy 
Packit 1fb8d4
					"$<TARGET_FILE:${LIB}>"
Packit 1fb8d4
					"${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
Packit 1fb8d4
			COMMENT "Copying ${LIB} to output directory"
Packit 1fb8d4
			COMMAND install_name_tool -change "$<TARGET_SONAME_FILE:${LIB}>"
Packit 1fb8d4
				"@executable_path/../Frameworks/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
Packit 1fb8d4
				"${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/${MODULE_OUTPUT_NAME}"
Packit 1fb8d4
			COMMENT Setting install name for ${LIB}
Packit 1fb8d4
			COMMAND "${CMAKE_COMMAND}" -E echo install_name_tool -change "$<TARGET_SONAME_FILE:${LIB}>"
Packit 1fb8d4
				"@executable_path/../Frameworks/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
Packit 1fb8d4
				"${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/${MODULE_OUTPUT_NAME}")
Packit 1fb8d4
	endforeach()
Packit 1fb8d4
Packit 1fb8d4
	# Call install_name_tool to reassign the library install names in dependent libraries
Packit 1fb8d4
	foreach(DEST ${DEPENDENCIES})
Packit 1fb8d4
		foreach(LIB ${DEPENDENCIES})
Packit 1fb8d4
			# message("adding post-build dependency: ${LIB}")
Packit 1fb8d4
			add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
Packit 1fb8d4
				COMMAND install_name_tool -change "$<TARGET_SONAME_FILE:${LIB}>"
Packit 1fb8d4
					"@executable_path/../Frameworks/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${LIB}>"
Packit 1fb8d4
					"${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/Contents/$<TARGET_FILE_NAME:${DEST}>"
Packit 1fb8d4
				COMMENT Setting install name for ${LIB} in module ${DEST})
Packit 1fb8d4
		endforeach()
Packit 1fb8d4
	endforeach()
Packit 1fb8d4
Packit 1fb8d4
endif()
Packit 1fb8d4
Packit 1fb8d4
# Add post-build NIB file generation in unix makefiles. XCode handles this implicitly.
Packit 1fb8d4
# if("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
Packit 1fb8d4
	message(STATUS "Adding post-build NIB file generation event for ${MODULE_NAME}")
Packit 1fb8d4
Packit 1fb8d4
	# Make sure we can find the 'ibtool' program. If we can NOT find it we
Packit 1fb8d4
	# skip generation of this project
Packit 1fb8d4
	find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
Packit 1fb8d4
	if (${IBTOOL} STREQUAL "IBTOOL-NOTFOUND")
Packit 1fb8d4
		message(SEND_ERROR "ibtool can not be found and is needed to compile the .xib files. It should have been installed with 
Packit 1fb8d4
				the Apple developer tools. The default system paths were searched in addition to ${OSX_DEVELOPER_ROOT}/usr/bin")
Packit 1fb8d4
	endif()
Packit 1fb8d4
Packit 1fb8d4
	# Make sure the 'Resources' Directory is correctly created before we build
Packit 1fb8d4
	add_custom_command(TARGET ${MODULE_NAME} PRE_BUILD
Packit 1fb8d4
						  COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/Versions/${MACOSX_BUNDLE_SHORT_VERSION_STRING}/Resources)
Packit 1fb8d4
Packit 1fb8d4
	# Compile the .xib files using the 'ibtool' program with the destination being the app package
Packit 1fb8d4
	foreach(xib ${${MODULE_PREFIX}_XIBS})
Packit 1fb8d4
		get_filename_component(XIB_WE ${xib} NAME_WE)
Packit 1fb8d4
						 
Packit 1fb8d4
		add_custom_command (TARGET ${MODULE_NAME} POST_BUILD 
Packit 1fb8d4
			COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text 
Packit 1fb8d4
				--compile ${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/Versions/${MACOSX_BUNDLE_SHORT_VERSION_STRING}/Resources/${XIB_WE}.nib ${CMAKE_CURRENT_SOURCE_DIR}/${xib}
Packit 1fb8d4
			COMMENT "Compiling ${xib}")
Packit 1fb8d4
	endforeach()
Packit 1fb8d4
# endif()
Packit 1fb8d4
Packit 1fb8d4
# Copy the public header files into the framework
Packit 1fb8d4
foreach(HEADER ${${MODULE_PREFIX}_HEADERS})
Packit 1fb8d4
	# message("adding post-build dependency: ${LIB}")
Packit 1fb8d4
	add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
Packit 1fb8d4
		COMMAND ditto ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER} ${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/Headers/
Packit 1fb8d4
		COMMENT Copying public header files to ${MODULE_NAME})
Packit 1fb8d4
endforeach()
Packit 1fb8d4
Packit 1fb8d4
# Copy the FreeRDP header files into the framework
Packit 1fb8d4
add_custom_command(TARGET ${MODULE_NAME} POST_BUILD
Packit 1fb8d4
	COMMAND ditto ${CMAKE_SOURCE_DIR}/include/freerdp ${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/Headers/freerdp
Packit 1fb8d4
	COMMAND ditto ${CMAKE_SOURCE_DIR}/winpr/include/winpr ${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/${MODULE_OUTPUT_NAME}.framework/Headers/winpr
Packit 1fb8d4
	COMMENT Copying FreeRDP header files to ${MODULE_NAME})
Packit 1fb8d4
Packit 1fb8d4
add_subdirectory(cli)