diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e759b5..97896ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,39 +12,66 @@ set(PACKAGE_BUGREPORT "Michal.Trojnara@stunnel.org") set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) -# make find modules in cmake dir available -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") +# load CMake library modules +include(FindOpenSSL) +include(FindCURL) # load CMake project modules -include(SetOptions) -include(FindOpenssl) -include(FindCurl) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") include(FindMapping) -# use config.h -target_compile_definitions(osslsigncode PRIVATE HAVE_CONFIG_H=1) +# define the target +add_executable(osslsigncode) + +# create and use config.h configure_file(Config.h.in config.h) +target_compile_definitions(osslsigncode PRIVATE HAVE_CONFIG_H=1) -# add include directories to osslsigncode -target_include_directories(osslsigncode PUBLIC "${PROJECT_BINARY_DIR}") +# set sources +target_sources(osslsigncode PRIVATE osslsigncode.c msi.c) +if(WIN32) +target_sources(osslsigncode PRIVATE ${OPENSSL_INCLUDE_DIRS}/applink.c) +endif(WIN32) -if(MSVC) +# set include directories +target_include_directories(osslsigncode PRIVATE "${PROJECT_BINARY_DIR}") + +# set OpenSSL includes/libraries +if(NOT OPENSSL_FOUND) + message(FATAL_ERROR "OpenSSL library not found") +endif(NOT OPENSSL_FOUND) +target_include_directories(osslsigncode PRIVATE ${OPENSSL_INCLUDE_DIRS}) +target_link_libraries(osslsigncode PRIVATE ${OPENSSL_LIBRARIES}) + +# set cURL includes/libraries +if(CURL_FOUND) + target_compile_definitions(osslsigncode PRIVATE ENABLE_CURL=1) + target_include_directories(osslsigncode PRIVATE ${CURL_INCLUDE_DIRS}) + target_link_libraries(osslsigncode PRIVATE ${CURL_LIBRARIES}) + message(NOTICE "cURL support enabled") +else(CURL_FOUND) + message(WARNING "cURL support disabled (library not found)") +endif(CURL_FOUND) + +if(WIN32) # set output directory set_target_properties(osslsigncode PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR} ) - # copy necessary libraries - file(COPY ${OPENSSL_LIBS} ${CURL_LIB} DESTINATION ${PROJECT_BINARY_DIR}) -else() + # copy the libraries + file(COPY ${OPENSSL_LIBRARIES} ${CURL_LIBRARIES} DESTINATION ${PROJECT_BINARY_DIR}) +else(WIN32) # set LD_LIBRARY_PATH set_target_properties(osslsigncode PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE ) -endif() +endif(WIN32) include(CMakeTest) + include(CMakeInstall) -if(NOT MSVC) + +if(NOT WIN32) include(CMakeDist) -endif() +endif(NOT WIN32) diff --git a/INSTALL.W32.md b/INSTALL.W32.md index 3dcd131..8938cfc 100644 --- a/INSTALL.W32.md +++ b/INSTALL.W32.md @@ -12,7 +12,7 @@ 2) Run "MSYS2 MinGW 64-bit" and build 64-bit Windows executables. ``` cd osslsigncode-folder - x86_64-w64-mingw32-gcc osslsigncode.c msi.c msi.h -o osslsigncode.exe \ + x86_64-w64-mingw32-gcc osslsigncode.c msi.c -o osslsigncode.exe \ -lcrypto -lssl -lcurl \ -D 'PACKAGE_STRING="osslsigncode 2.4"' \ -D 'PACKAGE_BUGREPORT="Michal.Trojnara@stunnel.org"' \ @@ -71,7 +71,7 @@ 3) Build 64-bit Windows executables. ``` cd osslsigncode-folder - x86_64-w64-mingw32-gcc osslsigncode.c msi.c msi.h -o osslsigncode.exe \ + x86_64-w64-mingw32-gcc osslsigncode.c msi.c -o osslsigncode.exe \ -L 'C:/OpenSSL/lib/' -lcrypto -lssl \ -I 'C:/OpenSSL/include/' \ -L 'C:/curl/lib' -lcurl \ @@ -94,28 +94,18 @@ libcurl/7.78.0 OpenSSL/1.1.1k ``` -### Building OpenSSL, Curl and osslsigncode sources with Microsoft Visual Studio 64-bit: +### Building OpenSSL, Curl and osslsigncode sources with Microsoft Visual Studio: -1) Download and install Strawberry Perl from https://strawberryperl.com/ +1) Install and integrate vcpkg: https://vcpkg.io/en/getting-started.html -2) Run "Open Visual Studio 2022 Tools Command Prompt for targeting x64" - -3) Build and install OpenSSL. +2) Install the prerequisites: ``` - cd openssl-(version) - perl Configure VC-WIN64A --prefix=C:\OpenSSL\vc-win64a --openssldir=C:\OpenSSL\SSL no-asm shared - nmake && nmake install + vcpkg install openssl curl ``` -4) Build and install curl. -``` - cd curl-(version)\winbuild - nmake /f Makefile.vc mode=dll WITH_PREFIX=C:\curl SSL_PATH=C:\OpenSSL\vc-win64a \ - VC=22 MACHINE=x64 DEBUG=no WITH_SSL=dll ENABLE_NGHTTP2=no ENABLE_SSPI=no \ - ENABLE_IDN=no GEN_PDB=no ENABLE_WINSSL=no USE_ZLIB=no -``` +3) Git clone osslsigncode: https://github.com/mtrojnar/osslsigncode/ -5) Build 64-bit Windows osslsigncode. +4) Build osslsigncode with GUI or cmake. Navigate to the build directory and run CMake to configure the osslsigncode project and generate a native build system: ``` @@ -125,21 +115,18 @@ ``` -Denable-strict=ON -Denable-pedantic=ON - -Dwith-curl=OFF - -Dssl-path=C:\OpenSSL\ - -Dcurl-path=C:\curl\ ``` Then call that build system to actually compile/link the osslsigncode project: ``` cmake --build . ``` -6) Make tests. +5) Make tests. ``` ctest -C Release ``` -5) Make install (with administrator privileges). +6) Make install (with administrative privileges). ``` cmake --install . --prefix "C:\osslsigncode" ``` diff --git a/README.md b/README.md index 1c0d06a..208b9a5 100644 --- a/README.md +++ b/README.md @@ -54,9 +54,6 @@ You may need to use `cmake3` instead of `cmake` to complete the following steps ``` -Denable-strict=ON -Denable-pedantic=ON - -Dssl-path=/opt/openssl-3.0.2/ - -Dcurl-path=/opt/curl-7.82/ - -Dwith-curl=OFF ``` * Then call that build system to actually compile/link the osslsigncode project (alias `make`): ``` diff --git a/cmake/FindCurl.cmake b/cmake/FindCurl.cmake deleted file mode 100644 index d32b55b..0000000 --- a/cmake/FindCurl.cmake +++ /dev/null @@ -1,47 +0,0 @@ -# find the native CURL headers and libraries - -if(with-curl) - if(curl-path) - set(CURL_SEARCH_DIR PATHS ${CURL_ROOT} NO_DEFAULT_PATH) - find_path(CURL_INCLUDE_DIRS - NAMES curl/curl.h - PATHS ${CURL_SEARCH_DIR} - PATH_SUFFIXES include - REQUIRED - ) - find_library(CURL_LIBRARIES - NAMES libcurl libcurl.so - PATHS ${CURL_SEARCH_DIR} - PATH_SUFFIXES lib - NO_DEFAULT_PATH - REQUIRED - ) - mark_as_advanced( - CURL_INCLUDE_DIRS - CURL_LIBRARIES - ) - set(CURL_FOUND TRUE) - endif() - - if(CURL_FOUND) - target_link_libraries(osslsigncode PRIVATE ${CURL_LIBRARIES}) - include_directories(${CURL_INCLUDE_DIRS}) - message(STATUS "Link CURL library: ${CURL_LIBRARIES}") - message(STATUS "Include CURL directory: ${CURL_INCLUDE_DIRS}") - set(ENABLE_CURL 1) - else() - MESSAGE(FATAL_ERROR "Could not find the CURL library and development files.") - endif() - - if(MSVC) - find_path(CURL_BIN_DIR - NAMES curl.exe - PATHS ${CURL_SEARCH_DIR} - PATH_SUFFIXES bin - REQUIRED - ) - set(CURL_LIB "${CURL_BIN_DIR}/libcurl.dll") - endif() -else() - message(STATUS "Disable CURL") -endif() diff --git a/cmake/FindOpenssl.cmake b/cmake/FindOpenssl.cmake deleted file mode 100644 index e20d3d6..0000000 --- a/cmake/FindOpenssl.cmake +++ /dev/null @@ -1,71 +0,0 @@ -# find the OpenSSL encryption library - -if(ssl-path) - set(OPENSSL_SEARCH_DIR PATHS ${OPENSSL_ROOT} NO_DEFAULT_PATH) - find_path(OPENSSL_INCLUDE_DIR - NAMES openssl/opensslconf.h - PATHS ${OPENSSL_SEARCH_DIR} - PATH_SUFFIXES include - REQUIRED - ) - find_library(OPENSSL_SSL - NAMES libssl libssl.so - PATHS ${OPENSSL_SEARCH_DIR} - PATH_SUFFIXES lib lib64 - NO_DEFAULT_PATH - REQUIRED - ) - find_library(OPENSSL_CRYPTO - NAMES libcrypto libcrypto.so - PATHS ${OPENSSL_SEARCH_DIR} - PATH_SUFFIXES lib lib64 - NO_DEFAULT_PATH - REQUIRED - ) - - if(MSVC) - find_file(OPENSSL_APPLINK_SOURCE - NAMES openssl/applink.c - PATHS ${OPENSSL_INCLUDE_DIR} - NO_DEFAULT_PATH - REQUIRED - ) - else() - set(OPENSSL_APPLINK_SOURCE) - endif() - - set(OPENSSL_LIBRARIES ${OPENSSL_SSL} ${OPENSSL_CRYPTO}) - mark_as_advanced( - OPENSSL_INCLUDE_DIR - OPENSSL_LIBRARIES - OPENSSL_APPLINK_SOURCE - ) - set(OPENSSL_FOUND TRUE) -endif() - -if(OPENSSL_FOUND) - message(STATUS "Link OpenSSL libraries: ${OPENSSL_LIBRARIES}") - message(STATUS "Include OpenSSL directory: ${OPENSSL_INCLUDE_DIR}") - if(MSVC) - message(STATUS "OpenSSL applink source: ${OPENSSL_APPLINK_SOURCE}") - endif() -else() - MESSAGE(FATAL_ERROR "Could not find the OpenSSL library and development files.") -endif() - -if(MSVC) - find_path(OPENSSL_BIN_DIR - NAMES openssl.exe - PATHS ${OPENSSL_SEARCH_DIR} - PATH_SUFFIXES bin - REQUIRED - ) - set(OPENSSL_LIBS "${OPENSSL_BIN_DIR}/libcrypto-3-x64.dll" "${OPENSSL_BIN_DIR}/libssl-3-x64.dll") -endif() - -# add an executable target called "osslsigncode" to be built from the source files -set(SOURCE_FILES osslsigncode.c msi.c ${OPENSSL_APPLINK_SOURCE}) -add_executable(osslsigncode) -target_sources(osslsigncode PRIVATE ${SOURCE_FILES}) -target_link_libraries(osslsigncode PRIVATE ${OPENSSL_LIBRARIES}) -include_directories(${OPENSSL_INCLUDE_DIR}) diff --git a/cmake/SetOptions.cmake b/cmake/SetOptions.cmake index 0a26f29..2db09f4 100644 --- a/cmake/SetOptions.cmake +++ b/cmake/SetOptions.cmake @@ -9,30 +9,6 @@ option(enable-strict "Enable strict compile mode" OFF) option(enable-pedantic "Enable pedantic compile mode" OFF) option(with-curl "Enable curl" ON) -if(MSVC) - set(ssl-path "D:/TEMP/OpenSSL-3.0.2/vc-win64a" CACHE FILEPATH "OpenSSL library path") - set(curl-path "D:/TEMP/curl-7.82.0" CACHE FILEPATH "cURL library path") -else() - option(ssl-path "OpenSSL library path" OFF) - option(curl-path "cURL library path" OFF) -endif() - -if(ssl-path) - set(OPENSSL_ROOT ${ssl-path}) - set(OPENSSL_SEARCH_DIR) -else() - include(FindOpenSSL) -endif() - -if(with-curl) - if(curl-path) - set(CURL_ROOT ${curl-path}) - set(CURL_BIN_DIR) - else() - include(FindCURL) - endif() -endif() - # enable compile options if(enable-strict) message(STATUS "Enable strict compile mode")