Skip to content

Commit

Permalink
fix: CMake improvements as suggested in #18
Browse files Browse the repository at this point in the history
Credit to @madebr
  • Loading branch information
Pro committed Jun 23, 2020
1 parent 6369d85 commit 437083c
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 31 deletions.
27 changes: 17 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
cmake_minimum_required(VERSION 2.8)

project(mdnsd)
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/cmake")
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/cmake")

include(GNUInstallDirs)

option(MDNSD_BUILD_OSS_FUZZ "Special build switch used in oss-fuzz" OFF)
mark_as_advanced(MDNSD_BUILD_OSS_FUZZ)
Expand All @@ -13,13 +15,21 @@ if(MDNSD_BUILD_FUZZING)
add_definitions(-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
endif()

set(BUILD_SHARED_LIBS_DEFAULT ON)
if(MDNSD_BUILD_OSS_FUZZ)
set(BUILD_SHARED_LIBS_DEFAULT OFF)
endif()
option(BUILD_SHARED_LIBS "Build libmdnsd as a shared library" ${BUILD_SHARED_LIBS_DEFAULT})

if(MDNSD_BUILD_FUZZING_CORPUS)
add_definitions(-DMDNSD_DEBUG_DUMP_PKGS_FILE)
endif()

option(MDNSD_ENABLE_SANITIZERS "enable sanitizers for mdnsd ON)" ON)

# Debug
string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER_CASE)
if(BUILD_TYPE_LOWER_CASE STREQUAL "debug" AND UNIX)
if(MDNSD_ENABLE_SANITIZERS AND BUILD_TYPE_LOWER_CASE STREQUAL "debug" AND UNIX)
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang")
# Add default sanitizer settings when using clang and Debug build.
# This allows e.g. CLion to find memory locations for SegFaults
Expand All @@ -42,17 +52,14 @@ if(MDNSD_BUILD_FUZZING OR MDNSD_BUILD_OSS_FUZZ)
endif()

add_executable(mdnsd mdnsd.c)
target_link_libraries(mdnsd libmdnsd)
if(WIN32 OR MINGW)
target_link_libraries(mdnsd wsock32 ws2_32)
endif()
target_link_libraries(mdnsd PRIVATE libmdnsd)

add_executable(mquery mquery.c)
target_link_libraries(mquery libmdnsd)
if(WIN32 OR MINGW)
target_link_libraries(mquery wsock32 ws2_32)
endif()
target_link_libraries(mquery PRIVATE libmdnsd)

install(TARGETS mdnsd mquery
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)

#if(MDNSD_BUILD_UNIT_TESTS)
# enable_testing()
Expand Down
44 changes: 23 additions & 21 deletions libmdnsd/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ set(MDNSD_LOGLEVEL 300 CACHE STRING "Level at which logs shall be reported")
option(MDNSD_COMPILE_AS_CXX "Force compilation with a C++ compiler" OFF)
mark_as_advanced(MDNSD_COMPILE_AS_CXX)

option(CMAKE_POSITION_INDEPENDENT_CODE "Build mdnsd using -fPIC" ON)

if(NOT MDNSD_COMPILE_AS_CXX AND (CMAKE_COMPILER_IS_GNUCC OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang"))
add_definitions(-std=c99 -pipe
-Wall -Wextra -Werror
Expand All @@ -25,10 +27,13 @@ if(NOT MDNSD_COMPILE_AS_CXX AND (CMAKE_COMPILER_IS_GNUCC OR "x${CMAKE_C_COMPILER
add_definitions(-Wpedantic)
endif()
if(NOT WIN32 AND NOT CYGWIN)
add_definitions(-Wshadow -Wconversion -fvisibility=hidden -fPIC)
add_definitions(-Wshadow -Wconversion)
endif()
endif()

set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)

option(MDNSD_ENABLE_COVERAGE "Enable gcov coverage" OFF)
if(MDNSD_ENABLE_COVERAGE)
set(CMAKE_BUILD_TYPE DEBUG)
Expand All @@ -47,7 +52,7 @@ configure_file("mdnsd_config.h.in" "${PROJECT_BINARY_DIR}/mdnsd_config.h")
include_directories(${PROJECT_BINARY_DIR})

set(PUBLIC_INCLUDES mdnsd.h 1035.h sdtxt.h xht.h)
if(WIN32)
if(CMAKE_C_COMPILER_ID MATCHES MSVC)
list(APPEND PUBLIC_INCLUDES ms_stdint.h)
endif()

Expand All @@ -63,37 +68,34 @@ if (MDNSD_BUILD_FUZZING_CORPUS)
endif()

if(MDNSD_COMPILE_AS_CXX)
set_source_files_properties(${LIBRARY_FILES} PROPERTIES LANGUAGE CXX)
set_source_files_properties(${LIBRARY_FILES} PROPERTIES LANGUAGE CXX)
endif()

if(MDNSD_BUILD_OSS_FUZZ)
add_library(libmdnsd ${LIBRARY_FILES} ${PUBLIC_INCLUDES})
else()
add_library(libmdnsd SHARED ${LIBRARY_FILES} ${PUBLIC_INCLUDES})
endif()
add_library(libmdnsd ${LIBRARY_FILES} ${PUBLIC_INCLUDES})
set_property(TARGET libmdnsd PROPERTY OUTPUT_NAME "mdnsd")
set_property(TARGET libmdnsd PROPERTY DEFINE_SYMBOL "MDNSD_DYNAMIC_LINKING_EXPORT")

if(WIN32 OR MINGW)
target_link_libraries(libmdnsd wsock32 ws2_32)
if(WIN32)
target_link_libraries(libmdnsd PUBLIC wsock32 ws2_32)
endif()

target_compile_definitions(libmdnsd PRIVATE -DMDNSD_DYNAMIC_LINKING_EXPORT)

include(GNUInstallDirs)

install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)

install(
FILES ${PUBLIC_INCLUDES}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}"
)

install(
FILES ${PROJECT_BINARY_DIR}/mdnsd_config.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
FILES ${PROJECT_BINARY_DIR}/mdnsd_config.h
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}"
)
install(
FILES "${PROJECT_SOURCE_DIR}/LICENSE"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}"
)

0 comments on commit 437083c

Please sign in to comment.