Skip to content

Commit

Permalink
[cmake] unify windows resource file generation
Browse files Browse the repository at this point in the history
* use a macro to add resource files for executables and shared libraries
* use that macro to declare targets
* use that macro to set library/binary versioning
* use that macro to set target output name
* use a macro to create manpages and names
  • Loading branch information
akallabeth committed Mar 20, 2024
1 parent ea9e219 commit 678ff14
Show file tree
Hide file tree
Showing 38 changed files with 215 additions and 670 deletions.
8 changes: 0 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -367,14 +367,6 @@ if(WIN32)

set(CMAKE_DL_LIBS "")
set(CMAKE_USE_RELATIVE_PATH ON)
if (${CMAKE_GENERATOR} MATCHES "NMake Makefile*" OR ${CMAKE_GENERATOR} MATCHES "Ninja*" OR ${CMAKE_GENERATOR} MATCHES "Unix Makefiles")
set(CMAKE_PDB_BINARY_DIR ${PROJECT_BINARY_DIR})
elseif (${CMAKE_GENERATOR} MATCHES "Visual Studio*")
set(CMAKE_PDB_BINARY_DIR "${PROJECT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
else()
message(FATAL_ERROR "Unknown generator ${CMAKE_GENERATOR}")
endif()

string(TIMESTAMP RC_VERSION_YEAR "%Y")

if(NOT DEFINED CMAKE_WINDOWS_VERSION)
Expand Down
5 changes: 0 additions & 5 deletions channels/server/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@ endforeach()

add_library(${MODULE_NAME} STATIC ${${MODULE_PREFIX}_SRCS})

if (WITH_LIBRARY_VERSIONING)
set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION})
endif()


set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp)

set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} PARENT_SCOPE)
Expand Down
10 changes: 2 additions & 8 deletions client/SDL/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ option(WITH_WIN_CONSOLE "Build ${PROJECT_NAME} with console support" ON)
option(WITH_SDL_LINK_SHARED "link SDL dynamic or static" ON)

if(WITH_WIN_CONSOLE)
set(WIN32_GUI_FLAG "")
set(WIN32_GUI_FLAG "TRUE")
else()
set(WIN32_GUI_FLAG "WIN32")
endif()
Expand Down Expand Up @@ -113,14 +113,8 @@ else()
list(APPEND LIBS ${SDL2_LIBRARIES})
endif()

add_executable(${PROJECT_NAME}
${WIN32_GUI_FLAG}
${SRCS}
)
AddTargetWithResourceFile(${PROJECT_NAME} "${WIN32_GUI_FLAG}" "${PROJECT_VERSION}" SRCS)

if (WITH_BINARY_VERSIONING)
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}${PROJECT_VERSION_MAJOR}")
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBS})
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER "Client/SDL")
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)
Expand Down
6 changes: 1 addition & 5 deletions client/SDL/man/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,4 @@ set(DEPS
sdl-freerdp-envvar.1.xml
)

set(MANPAGE_NAME ${PROJECT_NAME})
if (WITH_BINARY_VERSIONING)
set(MANPAGE_NAME ${PROJECT_NAME}${PROJECT_VERSION_MAJOR})
endif()
generate_and_install_freerdp_man_from_xml(${PROJECT_NAME}.1 ${MANPAGE_NAME}.1 "${DEPS}")
generate_and_install_freerdp_man_from_xml(${PROJECT_NAME} "1" "${FREERDP_API_VERSION}" "${DEPS}")
21 changes: 1 addition & 20 deletions client/Sample/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,7 @@ set(SRCS
tf_freerdp.h
tf_freerdp.c)

# On windows create dll version information.
# Vendor, product and year are already set in top level CMakeLists.txt
if (WIN32)
set (RC_VERSION_MAJOR ${FREERDP_VERSION_MAJOR})
set (RC_VERSION_MINOR ${FREERDP_VERSION_MINOR})
set (RC_VERSION_BUILD ${FREERDP_VERSION_REVISION})
set (RC_VERSION_FILE "${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}" )

configure_file(
${PROJECT_SOURCE_DIR}/../../cmake/WindowsDLLVersion.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)

list (APPEND SRCS ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
endif()

add_executable(${PROJECT_NAME} ${SRCS})
AddTargetWithResourceFile(${PROJECT_NAME} TRUE "${PROJECT_VERSION}" SRCS)

set(LIBS
freerdp-client
Expand All @@ -70,8 +54,5 @@ set(LIBS
)
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBS})

if (WITH_BINARY_VERSIONING)
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}${PROJECT_VERSION_MAJOR}")
endif()
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER "Client/Sample")
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)
10 changes: 2 additions & 8 deletions client/Wayland/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,11 @@ endif()

list (APPEND ${MODULE_PREFIX}_LIBS freerdp-client freerdp uwac)

add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS})
AddTargetWithResourceFile(${MODULE_NAME} TRUE ${FREERDP_VERSION} ${MODULE_PREFIX}_SRCS)

set(MANPAGE_NAME ${MODULE_NAME})
if (WITH_BINARY_VERSIONING)
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "${MODULE_NAME}${FREERDP_API_VERSION}")
set(MANPAGE_NAME ${MODULE_NAME}${FREERDP_API_VERSION})
endif()
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})

install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)

set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Wayland")
configure_file(wlfreerdp.1.in ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE_NAME}.1)
install_freerdp_man(${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE_NAME}.1 1)
generate_and_install_freerdp_man_from_template(${MODULE_NAME} "1" "${FREERDP_API_VERSION}")
56 changes: 6 additions & 50 deletions client/Windows/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,26 +40,6 @@ set(${MODULE_PREFIX}_SRCS
resource/wfreerdp.rc
resource/resource.h)

# On windows create dll version information.
# Vendor, product and year are already set in top level CMakeLists.txt
if (WIN32 AND BUILD_SHARED_LIBS)
set (RC_VERSION_MAJOR ${FREERDP_VERSION_MAJOR})
set (RC_VERSION_MINOR ${FREERDP_VERSION_MINOR})
set (RC_VERSION_BUILD ${FREERDP_VERSION_REVISION})
if(WITH_CLIENT_INTERFACE)
set (RC_VERSION_FILE "${CMAKE_SHARED_LIBRARY_PREFIX}${MODULE_NAME}${FREERDP_API_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
else()
set (RC_VERSION_FILE "${MODULE_NAME}${CMAKE_EXECUTABLE_SUFFIX}" )
endif()

configure_file(
${PROJECT_SOURCE_DIR}/cmake/WindowsDLLVersion.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)

set ( ${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
endif()

option(WITH_WINDOWS_CERT_STORE "Build ${MODULE_NAME} with additional certificate validation against windows certificate store" ON)
if(WITH_WINDOWS_CERT_STORE)
add_definitions("-DWITH_WINDOWS_CERT_STORE")
Expand All @@ -68,7 +48,7 @@ endif()
option(WITH_WIN_CONSOLE "Build ${MODULE_NAME} with console support" OFF)
if(WITH_WIN_CONSOLE)
add_definitions("-DWITH_WIN_CONSOLE")
set(WIN32_GUI_FLAG "")
set(WIN32_GUI_FLAG "TRUE")
else()
set(WIN32_GUI_FLAG "WIN32")
endif()
Expand All @@ -78,27 +58,12 @@ if(WITH_PROGRESS_BAR)
add_definitions("-DWITH_PROGRESS_BAR")
endif()

if(WITH_CLIENT_INTERFACE)
if(CLIENT_INTERFACE_SHARED)
add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS})
else()
add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS})
endif()
if (WITH_LIBRARY_VERSIONING)
set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION})
endif()
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME ${MODULE_NAME}${FREERDP_API_VERSION})
target_include_directories(${MODULE_NAME} INTERFACE $<INSTALL_INTERFACE:include>)
if(CLIENT_INTERFACE_SHARED)
AddTargetWithResourceFile(${MODULE_NAME} "SHARED" "${FREERDP_VERSION}" ${MODULE_PREFIX}_SRCS)
else()
set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} cli/wfreerdp.c cli/wfreerdp.h)
add_executable(${MODULE_NAME} ${WIN32_GUI_FLAG} ${${MODULE_PREFIX}_SRCS})
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
if (WITH_BINARY_VERSIONING)
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "wfreerdp${FREERDP_API_VERSION}")
else()
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "wfreerdp")
endif()
AddTargetWithResourceFile(${MODULE_NAME} FALSE "${FREERDP_VERSION}" ${MODULE_PREFIX}_SRCS)
endif()
target_include_directories(${MODULE_NAME} INTERFACE $<INSTALL_INTERFACE:include>)

list(APPEND LIBS freerdp-client)
list(APPEND LIBS winpr freerdp)
Expand All @@ -112,16 +77,7 @@ target_link_libraries(${MODULE_NAME} PRIVATE ${LIBS})

if(WITH_CLIENT_INTERFACE)
install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS)
install(FILES ${CMAKE_PDB_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols)
endif()
add_subdirectory(cli)
else()
install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)
if (WITH_DEBUG_SYMBOLS AND MSVC)
get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME)
install(FILES ${CMAKE_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT symbols)
endif()
endif()
add_subdirectory(cli)

set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Windows")
24 changes: 1 addition & 23 deletions client/Windows/cli/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,33 +25,11 @@ set(${MODULE_PREFIX}_SRCS
wfreerdp.h
../resource/wfreerdp.rc)

# On windows create dll version information.
# Vendor, product and year are already set in top level CMakeLists.txt
if (WIN32)
set (RC_VERSION_MAJOR ${FREERDP_VERSION_MAJOR})
set (RC_VERSION_MINOR ${FREERDP_VERSION_MINOR})
set (RC_VERSION_BUILD ${FREERDP_VERSION_REVISION})
set (RC_VERSION_FILE "${MODULE_NAME}${CMAKE_EXECUTABLE_SUFFIX}" )
AddTargetWithResourceFile(${MODULE_NAME} "${WIN32_GUI_FLAG}" "${FREERDP_VERSION}" ${MODULE_PREFIX}_SRCS)

configure_file(
${PROJECT_SOURCE_DIR}/cmake/WindowsDLLVersion.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)

set ( ${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
endif()
add_executable(${MODULE_NAME} ${WIN32_GUI_FLAG} ${${MODULE_PREFIX}_SRCS})

if (WITH_BINARY_VERSIONING)
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "${MODULE_NAME}${PROJECT_VERSION_MAJOR}")
endif()
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} wfreerdp-client)

target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})

install(TARGETS ${MODULE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)
if (WITH_DEBUG_SYMBOLS AND MSVC)
install(FILES ${CMAKE_PDB_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT symbols)
endif()

set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Windows")
30 changes: 6 additions & 24 deletions client/X11/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ if (NOT FREERDP_DEFAULT_PROJECT_VERSION)
set(FREERDP_DEFAULT_PROJECT_VERSION "1.0.0.0")
endif()

project(xfreerdp
project(xfreerdp-client
LANGUAGES C
VERSION ${FREERDP_DEFAULT_PROJECT_VERSION}
)
Expand Down Expand Up @@ -84,27 +84,12 @@ if (CHANNEL_TSMF_CLIENT)
)
endif()

if(WITH_CLIENT_INTERFACE)
if(CLIENT_INTERFACE_SHARED)
add_library(${PROJECT_NAME} SHARED ${SRCS})
if (WITH_LIBRARY_VERSIONING)
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION})
endif()
else()
add_library(${PROJECT_NAME} ${SRCS})
endif()
target_include_directories(${PROJECT_NAME} INTERFACE $<INSTALL_INTERFACE:include>)

if(CLIENT_INTERFACE_SHARED)
AddTargetWithResourceFile(${PROJECT_NAME} "SHARED" "${PROJECT_VERSION}" SRCS)
else()
list(APPEND SRCS
cli/xfreerdp.c xfreerdp.h
)
add_executable(${PROJECT_NAME} ${SRCS})
if (WITH_BINARY_VERSIONING)
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}${PROJECT_VERSION_MAJOR}")
endif()
include_directories(..)
AddTargetWithResourceFile(${PROJECT_NAME} "STATIC" "${PROJECT_VERSION}" SRCS)
endif()
target_include_directories(${PROJECT_NAME} INTERFACE $<INSTALL_INTERFACE:include>)

set(LIBS
${X11_LIBRARIES}
Expand Down Expand Up @@ -233,13 +218,10 @@ if(WITH_IPP)
target_link_libraries(${PROJECT_NAME} PRIVATE ${IPP_LIBRARY_LIST})
endif()

option(WITH_CLIENT_INTERFACE "Build clients as a library with an interface" OFF)
if(WITH_CLIENT_INTERFACE)
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
add_subdirectory(cli)
else()
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)
endif()
add_subdirectory(cli)

set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER "Client/X11")

21 changes: 5 additions & 16 deletions client/X11/cli/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,21 @@
# See the License for the specific language governing permissions and
# limitations under the License.

set(MODULE_NAME "xfreerdp-cli")
set(MODULE_NAME "xfreerdp")
set(MODULE_PREFIX "FREERDP_CLIENT_X11")

set(SRCS
xfreerdp.c
xfreerdp.c
)

add_executable(${MODULE_NAME} ${SRCS})

if (WITH_BINARY_VERSIONING)
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp${PROJECT_VERSION_MAJOR}")
else()
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp")
endif()
AddTargetWithResourceFile(${MODULE_NAME} TRUE "${PROJECT_VERSION}" SRCS)
set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "..")

list(APPEND LIBS
xfreerdp-client freerdp-client
xfreerdp-client
freerdp-client
)

if(OPENBSD)
list(APPEND LIBS
ossaudio
)
endif()

target_link_libraries(${MODULE_NAME} PRIVATE ${LIBS})

install(TARGETS ${MODULE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)
Expand Down
6 changes: 1 addition & 5 deletions client/X11/man/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,4 @@ set(DEPS
xfreerdp-envvar.1.xml
)

set(MANPAGE_NAME ${PROJECT_NAME})
if (WITH_BINARY_VERSIONING)
set(MANPAGE_NAME ${PROJECT_NAME}${PROJECT_VERSION_MAJOR})
endif()
generate_and_install_freerdp_man_from_xml(${PROJECT_NAME}.1 ${MANPAGE_NAME}.1 ${DEPS})
generate_and_install_freerdp_man_from_xml("xfreerdp" "1" "${FREERDP_API_VERSION}" ${DEPS})
28 changes: 1 addition & 27 deletions client/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,30 +58,9 @@ if(WITH_FUSE)
add_definitions(-D_FILE_OFFSET_BITS=64)
endif()

# On windows create dll version information.
# Vendor, product and year are already set in top level CMakeLists.txt
if (WIN32 AND BUILD_SHARED_LIBS)
set (RC_VERSION_MAJOR ${FREERDP_VERSION_MAJOR})
set (RC_VERSION_MINOR ${FREERDP_VERSION_MINOR})
set (RC_VERSION_BUILD ${FREERDP_VERSION_REVISION})
set (RC_VERSION_FILE "${CMAKE_SHARED_LIBRARY_PREFIX}${MODULE_NAME}${FREERDP_API_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}" )

configure_file(
${PROJECT_SOURCE_DIR}/cmake/WindowsDLLVersion.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)

list (APPEND SRCS ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
endif()

include_directories(${OPENSSL_INCLUDE_DIR})

add_library(${MODULE_NAME} ${SRCS})

set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME ${MODULE_NAME}${FREERDP_API_VERSION})
if (WITH_LIBRARY_VERSIONING)
set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION})
endif()
AddTargetWithResourceFile(${MODULE_NAME} FALSE "${FREERDP_VERSION}" SRCS)

list(APPEND LIBS freerdp winpr)

Expand All @@ -94,11 +73,6 @@ install(TARGETS ${MODULE_NAME} COMPONENT libraries EXPORT FreeRDP-ClientTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS)
get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME)
install(FILES ${CMAKE_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols)
endif()

set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Common")

if(BUILD_TESTING)
Expand Down

0 comments on commit 678ff14

Please sign in to comment.