/ 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)