From 8954da8babbdc24a4a1accaaa123b4020dcfbd4f Mon Sep 17 00:00:00 2001 From: William Brawner Date: Wed, 1 Jan 2020 12:54:56 -0600 Subject: [PATCH] Add options to build PiHelper for different contexts --- CMakeLists.txt | 6 --- PiHelper/CMakeLists.txt | 81 +++++++++++++++++++++++++++++++---------- README.md | 18 ++++++++- 3 files changed, 78 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b5f0d9..61e8a97 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,6 @@ cmake_minimum_required (VERSION 3.15.5) -include(GNUInstallDirs) - set(PIHELPER_VERSION 0.1.0) project( @@ -28,7 +26,3 @@ project( add_subdirectory(PiHelper) -install(TARGETS pihelper libpihelper) - -install(FILES PiHelper/pihelper.h DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/pihelper") - diff --git a/PiHelper/CMakeLists.txt b/PiHelper/CMakeLists.txt index 43631de..fbdc060 100644 --- a/PiHelper/CMakeLists.txt +++ b/PiHelper/CMakeLists.txt @@ -15,6 +15,8 @@ # You should have received a copy of the GNU General Public License # along with PiHelper. If not, see . +include(GNUInstallDirs) + set(PIHELPER_SOURCES pihelper.c log.c @@ -22,18 +24,12 @@ set(PIHELPER_SOURCES config.c ) -add_library(libpihelper - ${PIHELPER_SOURCES} - ) - -set_target_properties(libpihelper PROPERTIES OUTPUT_NAME "libpihelper") - -add_executable(pihelper - ${PIHELPER_SOURCES} - cli.c - ) - include_directories(/usr/local/include) +find_library ( + CURL + NAMES curl libcurl + HINTS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 + ) find_library ( JSONC NAMES json-c libjson-c @@ -50,6 +46,10 @@ find_library ( HINTS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) +if (NOT CURL) + message(SEND_ERROR "Did not find curl") +endif() + if (NOT JSONC) message(SEND_ERROR "Did not find json-c") endif() @@ -62,15 +62,58 @@ if (NOT OPENSSL) message(SEND_ERROR "Did not find OpenSSL") endif() -target_link_libraries(libpihelper curl) -target_link_libraries(pihelper curl) +option(PIHELPER_STATIC "Build Pi-Helper as a static library" ON) -target_link_libraries(libpihelper ${JSONC}) -target_link_libraries(pihelper ${JSONC}) +if (PIHELPER_STATIC) + add_library(libpihelperstatic STATIC + ${PIHELPER_SOURCES} + ) -target_link_libraries(libpihelper ${CRYPTO}) -target_link_libraries(pihelper ${CRYPTO}) + set_target_properties(libpihelperstatic PROPERTIES OUTPUT_NAME "pihelper") -target_link_libraries(libpihelper ${OPENSSL}) -target_link_libraries(pihelper ${OPENSSL}) + target_link_libraries(libpihelperstatic ${CURL}) + target_link_libraries(libpihelperstatic ${JSONC}) + target_link_libraries(libpihelperstatic ${CRYPTO}) + target_link_libraries(libpihelperstatic ${OPENSSL}) + + install(TARGETS libpihelperstatic ) +endif() + +option(PIHELPER_SHARED "Build Pi-Helper as a shared library" OFF) + +if (PIHELPER_SHARED) + add_library(libpihelpershared SHARED + ${PIHELPER_SOURCES} + ) + + set_target_properties(libpihelpershared PROPERTIES OUTPUT_NAME "pihelper") + + target_link_libraries(libpihelpershared ${CURL}) + target_link_libraries(libpihelpershared ${JSONC}) + target_link_libraries(libpihelpershared ${CRYPTO}) + target_link_libraries(libpihelpershared ${OPENSSL}) + + install(TARGETS libpihelpershared) +endif() + +option(PIHELPER_DEV "Install Pi-Helper header files for development" OFF) +if (PIHELPER_DEV) + install(FILES PiHelper/pihelper.h DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/pihelper") +endif() + +option(PIHELPER_EXECUTABLE "Build Pi-Helper as an executable" OFF) + +if (PIHELPER_EXECUTABLE) + add_executable(pihelper + ${PIHELPER_SOURCES} + cli.c + ) + + target_link_libraries(pihelper ${CURL}) + target_link_libraries(pihelper ${JSONC}) + target_link_libraries(pihelper ${CRYPTO}) + target_link_libraries(pihelper ${OPENSSL}) + + install(TARGETS pihelper) +endif() diff --git a/README.md b/README.md index b46a4e7..9709e3a 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,23 @@ Once you have the dependencies installed, you can build the project with cmake: cmake .. make -If you'd like to install pihelper to your system, run the following after building: +By default, this will build a static library you can link to. If you'd like to build a shared library, use +this cmake command instead: - sudo make install # This is optional, and only needed if you want to install command line utility + cmake -DPIHELPER_SHARED=BOOL:ON .. + +If you'd like to have the command line tool as well, you can use this: + + cmake -DPIHELPER_EXECUTABLE=BOOL:ON .. + +If you need the development headers on your system, you can run this: + + cmake -DPIHELPER_DEV=BOOL:ON .. + +Once you've run cmake with the desired options, you can install pihelper to your system by runnning the +following after building: + + sudo make install ## License