diff --git a/.gitignore b/.gitignore index fa74d57..73c2c28 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ cmake-build-debug cmake-build-release CMakeCache\.txt +pc/frnetlib.pc +include/frnetlib/version.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c4e50e..9ff9e2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,12 @@ cmake_minimum_required(VERSION 3.9) project(frnetlib) +include(GNUInstallDirs) set(FRNETLIB_LINK_LIBRARIES "") +set(FRNETLIB_LIBFLAGS "-lfrnetlib") + +set(FRNETLIB_VERSION_MAJOR 1) +set(FRNETLIB_VERSION_MINOR 1) +set(FRNETLIB_VERSION_PATCH 1) #Set module path set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules) @@ -14,7 +20,7 @@ set(FRNETLIB_BUILD_SHARED_LIBS false CACHE BOOL "Build shared library.") set(MAX_HTTP_HEADER_SIZE "0xC800" CACHE STRING "The maximum allowed HTTP header size in bytes") set(MAX_HTTP_BODY_SIZE "0xA00000" CACHE STRING "The maximum allowed HTTP body size in bytes") set(LISTEN_QUEUE_SIZE "64" CACHE STRING "The listen queue depth for fr::TcpListener/fr::SSLListener") -set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) +set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type") #Configure defines based on user options add_definitions(-DMAX_HTTP_HEADER_SIZE=${MAX_HTTP_HEADER_SIZE}) @@ -50,11 +56,14 @@ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CORE_CXX_FLAGS} -g -O0") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CORE_CXX_FLAGS} -O2") if(USE_SSL) - set(FRNETLIB_LINK_LIBRARIES ${FRNETLIB_LINK_LIBRARIES} ${MBEDTLS_LIBRARIES}) + set(FRNETLIB_LINK_LIBRARIES ${FRNETLIB_LINK_LIBRARIES} ${MBEDTLS_LIBRARIES}) + if( FRNETLIB_BUILD_SHARED_LIBS ) + set(FRNETLIB_LIBFLAGS "${FRNETLIB_LIBFLAGS} -lmbedcrypto -lmbedx509") + endif() endif() if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") endif() # Set the library output directory @@ -79,16 +88,12 @@ elseif(APPLE) set( LIB_PATH "lib" ) else() set( SHARE_PATH "${CMAKE_INSTALL_PREFIX}/share/FRNETLIB" ) - - if( LIB_SUFFIX ) - set( LIB_PATH "lib${LIB_SUFFIX}" ) - else() - set( LIB_PATH "lib" ) - endif() + set( LIB_PATH "${CMAKE_INSTALL_LIBDIR}" ) endif() if(WIN32) - set(FRNETLIB_LINK_LIBRARIES ${FRNETLIB_LINK_LIBRARIES} wsock32 ws2_32) + set(FRNETLIB_LINK_LIBRARIES ${FRNETLIB_LINK_LIBRARIES} wsock32 ws2_32) + set(FRNETLIB_LIBFLAGS "${FRNETLIB_LIBFLAGS} -lwsock32 -lws2_32") endif() target_link_libraries(frnetlib ${FRNETLIB_LINK_LIBRARIES}) @@ -106,6 +111,16 @@ if(BUILD_EXAMPLES) add_subdirectory(examples) endif() +configure_file( + "${CMAKE_SOURCE_DIR}/include/frnetlib/version.h.cmake.in" + "${CMAKE_SOURCE_DIR}/include/frnetlib/version.h" +) +configure_file( + "${CMAKE_SOURCE_DIR}/pc/frnetlib.pc.cmake.in" + "${CMAKE_SOURCE_DIR}/pc/frnetlib.pc" + @ONLY +) + install( TARGETS frnetlib RUNTIME DESTINATION bin COMPONENT bin @@ -114,6 +129,10 @@ install( ) install( - DIRECTORY include - DESTINATION . + DIRECTORY include/frnetlib + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) +install( + FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/frnetlib.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/" ) diff --git a/include/frnetlib/version.h b/include/frnetlib/version.h deleted file mode 100644 index 2dcaa9f..0000000 --- a/include/frnetlib/version.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Created by fred.nicolson on 12/07/18. -// - -#ifndef FRNETLIB_VERSION_H -#define FRNETLIB_VERSION_H - -//Format: Major | Minor | Patch - -#define FRNETLIB_VERSION_MAJOR 1 -#define FRNETLIB_VERSION_MINOR 1 -#define FRNETLIB_VERSION_PATCH 1 - -#define FRNETLIB_VERSION_NUMBER (FRNETLIB_VERSION_MAJOR * 100*100 + FRNETLIB_VERSION_MINOR * 100 + FRNETLIB_VERSION_PATCH) -#define FRNETLIB_VERSION_STRING "1.1.1" -#define FRNETLIB_VERSION_STRING_FULL "frnetlib 1.1.1" - -#endif //FRNETLIB_VERSION_H diff --git a/include/frnetlib/version.h.cmake.in b/include/frnetlib/version.h.cmake.in new file mode 100644 index 0000000..cd55659 --- /dev/null +++ b/include/frnetlib/version.h.cmake.in @@ -0,0 +1,18 @@ +// +// Created by fred.nicolson on 12/07/18. +// + +#ifndef FRNETLIB_VERSION_H +#define FRNETLIB_VERSION_H + +//Format: Major | Minor | Patch + +#define FRNETLIB_VERSION_MAJOR @FRNETLIB_VERSION_MAJOR@ +#define FRNETLIB_VERSION_MINOR @FRNETLIB_VERSION_MINOR@ +#define FRNETLIB_VERSION_PATCH @FRNETLIB_VERSION_PATCH@ + +#define FRNETLIB_VERSION_NUMBER (FRNETLIB_VERSION_MAJOR * 100*100 + FRNETLIB_VERSION_MINOR * 100 + FRNETLIB_VERSION_PATCH) +#define FRNETLIB_VERSION_STRING "@FRNETLIB_VERSION_MAJOR@.@FRNETLIB_VERSION_MINOR@.@FRNETLIB_VERSION_PATCH@" +#define FRNETLIB_VERSION_STRING_FULL "frnetlib @FRNETLIB_VERSION_MAJOR@.@FRNETLIB_VERSION_MINOR@.@FRNETLIB_VERSION_PATCH@" + +#endif //FRNETLIB_VERSION_H diff --git a/pc/frnetlib.pc.cmake.in b/pc/frnetlib.pc.cmake.in new file mode 100644 index 0000000..abd71e3 --- /dev/null +++ b/pc/frnetlib.pc.cmake.in @@ -0,0 +1,9 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: frnetlib +Description: Frnetlib, is a cross-platform, small and fast networking library written in C++. +URL: https://github.com/Cloaked9000/frnetlib +Version: @FRNETLIB_VERSION_MAJOR@.@FRNETLIB_VERSION_MINOR@.@FRNETLIB_VERSION_PATCH@ +Libs: -L${libdir} @FRNETLIB_LIBFLAGS@ +Cflags: -I${includedir}