/ CMakeLists.txt
CMakeLists.txt
1 cmake_minimum_required(VERSION 3.23 FATAL_ERROR) 2 project( 3 vigenere-plugin 4 VERSION 0.1 5 DESCRIPTION "'vigenere' is a Le'Sec plugin that implements the Vigénère 'cipher'." 6 LANGUAGES C) 7 set(CMAKE_C_STANDARD 99) 8 9 # Global CMake stuff we use 10 11 include(GNUInstallDirs) 12 include(FetchContent) 13 14 # Global facts 15 16 set(LSC_PLUGIN_DIR ${CMAKE_INSTALL_LIBDIR}/LeSec/plugins) 17 set(LSC_PLUGIN_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) 18 19 # Get all the things this project depends on 20 21 find_package(Perl REQUIRED) 22 find_package(LeUtils REQUIRED) 23 find_package(LeSecCore REQUIRED) 24 find_package(LeSecPlugin REQUIRED) 25 find_package(LeSecApp REQUIRED) 26 27 set(pluginlib1) 28 set(pluginlib2 LeSecPlugin::lsplugin_s) 29 30 # This project's sources. We have two variants of the plugin, so... 31 foreach(plugin_nr 1 2) 32 set(namevar vigenere${plugin_nr}) 33 set(srcvar ${namevar}_source) 34 set(${srcvar} 35 plugin${plugin_nr}.c 36 vigenere.c 37 ) 38 39 # The static variant of the plugin 40 add_library(${namevar}_s STATIC) 41 target_compile_definitions(${namevar}_s PRIVATE VIGENERE_STATIC_DEFINE) 42 set_target_properties(${namevar}_s PROPERTIES 43 PREFIX "" OUTPUT_NAME "${namevar}_s" 44 ) 45 46 # The module variant of the plugin 47 add_library(${namevar} MODULE) 48 set_target_properties(${namevar} PROPERTIES 49 PREFIX "" OUTPUT_NAME "${namevar}" SUFFIX ${LSC_PLUGIN_SUFFIX} 50 ) 51 52 # Specify everything that's common for both the static and the shared libraries 53 54 foreach(lib ${namevar}_s ${namevar}) 55 target_sources(${lib} 56 PRIVATE 57 ${${srcvar}} 58 $<TARGET_OBJECTS:leutils> 59 ) 60 target_compile_definitions(${lib} PRIVATE 61 AUTHOR="Le’" 62 VERSION="${PROJECT_VERSION}" 63 BUILDTYPE="${CMAKE_BUILD_TYPE}" 64 ) 65 set_target_properties(${lib} 66 PROPERTIES 67 VISIBILITY_INLINES_HIDDEN 1 68 C_VISIBILITY_PRESET hidden 69 LINKER_LANGUAGE C 70 ) 71 target_link_libraries(${lib} 72 PRIVATE LeSecCore::lscrypto_s LeSecCore::lscore_s ${pluginlib${plugin_nr}}) 73 endforeach() 74 75 install(TARGETS ${namevar}_s ${namevar} 76 LIBRARY 77 DESTINATION ${LSC_PLUGIN_DIR} 78 COMPONENT Plugins 79 ARCHIVE 80 DESTINATION ${CMAKE_INSTALL_LIBDIR} 81 COMPONENT Plugins 82 ) 83 endforeach() 84 85 # Add a wrapper script that sets common environment variables and runs 86 # the arguments as a command. 87 88 file(GENERATE OUTPUT wrap.sh INPUT wrap.sh.in 89 FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE) 90 91 # Tests 92 enable_testing() 93 add_subdirectory(tests)