Merge pull request #2005 from michaellukashov/fix-resource-leak
[far2l.git] / CMakeLists.txt
blob56817d3bbbf960de703fb0c4c8f8842c9e4d6e6c
1 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
3 cmake_minimum_required (VERSION 3.0.2)
5 project (far2l)
7 set(APP_NAME "far2l")
8 set(APP_IDENTIFIER "com.far2l")
9 set(CPACK_PACKAGE_NAME "far2l")
11 string(ASCII 27 Esc)
12 set(ColorNormal "${Esc}[m")
13 set(ColorRed "${Esc}[1;31m")
15 include(GNUInstallDirs)
17 # just to force reconfigure if packaging/version changed
18 configure_file(${CMAKE_SOURCE_DIR}/packaging/version ${CMAKE_BINARY_DIR}/packaging/version @ONLY)
20 # reconfigure in case .git directory changed to update version correctly
21 IF(EXISTS ${CMAKE_SOURCE_DIR}/.git)
22     set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/.git)
23 endif()
25 file(READ "${CMAKE_SOURCE_DIR}/packaging/version" VERSION)
26 string(REGEX REPLACE "[\r\n\t ]$" "" VERSION "${VERSION}")
27 string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
28 string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
29 string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.(.*)" "\\1" VERSION_PATCH "${VERSION}")
31 if("${VERSION_MAJOR}" STREQUAL "" OR "${VERSION_MAJOR}" STREQUAL "${VERSION}"
32     OR "${VERSION_MINOR}" STREQUAL "" OR "${VERSION_MINOR}" STREQUAL "${VERSION}"
33     OR "${VERSION_PATCH}" STREQUAL "" OR "${VERSION_PATCH}" STREQUAL "${VERSION}")
34         message(FATAL_ERROR "${ColorRed}packaging/version is corrupted, please write actual X.Y.Z version into it.${ColorNormal}")
35 endif()
37 find_package(Git)
39 if(GIT_FOUND)
40     execute_process(COMMAND "${GIT_EXECUTABLE}" describe --tag
41         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
42         OUTPUT_VARIABLE GIT_TAG
43         OUTPUT_STRIP_TRAILING_WHITESPACE)
44 endif()
46 if(NOT "${GIT_TAG}" STREQUAL "v_${VERSION}")
47     if(GIT_FOUND)
48         execute_process(COMMAND "${GIT_EXECUTABLE}" show --no-patch --format=%cs HEAD
49             WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
50             OUTPUT_VARIABLE GIT_DATE
51             OUTPUT_STRIP_TRAILING_WHITESPACE)
52         execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
53             WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
54             OUTPUT_VARIABLE GIT_HASH
55             OUTPUT_STRIP_TRAILING_WHITESPACE)
56     endif()
57     if(NOT "${GIT_DATE}" STREQUAL "")
58         message(STATUS "git date: ${GIT_DATE}")
59         set(VERSION_PATCH "${VERSION_PATCH}-${GIT_DATE}")
60     endif()
61     if(NOT "${GIT_HASH}" STREQUAL "")
62         message(STATUS "git hash: ${GIT_HASH}")
63         set(VERSION_PATCH "${VERSION_PATCH}-${GIT_HASH}")
64     else()
65         message(WARNING "git information unavailable, assuming its a build from v_${VERSION}")
66     endif()
67 endif()
69 set(VERSION_PATCH "${VERSION_PATCH}-beta")
71 set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
73 set(CMAKE_CXX_STANDARD_REQUIRED ON)
74 set(CMAKE_CXX_STANDARD 11)
75 set(CMAKE_CXX_EXTENSIONS OFF)
77 if(NOT CMAKE_BUILD_TYPE)
78    set(CMAKE_BUILD_TYPE "Release")
79 endif()
81 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE} Version: ${VERSION}")
83 if(NOT DEFINED CMAKE_INSTALL_PREFIX)
84    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
85       set(CMAKE_INSTALL_PREFIX "/usr/local")
86    elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
87       set(CMAKE_INSTALL_PREFIX "/usr/local")
88    else()
89       set(CMAKE_INSTALL_PREFIX "/usr")
90    endif()
91 endif()
93 ##############################
95 if (NOT DEFINED USEWX)
96     set(USEWX "YES")
97 endif()
99 if (NOT DEFINED UNRAR)
100     set(UNRAR "bundled")
101 endif()
103 if (NOT DEFINED USESPDLOG)
104     set(USESPDLOG "NO")
105 endif()
107 # EACP disabled by default for now as FAR's GetCodePageInfo rejects all multibyte charsets due to BUGBUG.
108 # Uncomment EACP-stuff here when that will be fixed. See https://github.com/elfmz/far2l/issues/1179
109 #if (NOT DEFINED EACP)
110 #   set(EACP "YES")
111 #endif()
113 if (NOT DEFINED LEGACY)
114     # TODO: default it to NO  somewhere in 2022, after all obsolete settings
115     # registry-upgrade-to-ini stuff will be safe to remove
116     set(LEGACY "YES")
117 elseif(FARFTP)
118     set(LEGACY "YES")
119     message(STATUS "Force-enable LEGACY due to enabled FARFTP")
120 endif()
122 #if (NOT EACP)
123 #   message(STATUS "${ColorRed}Building without East Asian codepages support due to EACP=${EACP}${ColorNormal}")
124 #endif()
126 # set(RM rm) actually not needed: use $(CMAKE_COMMAND) -E remove
128 if(MUSL)
129     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__MUSL__")
130     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__MUSL__")
131 endif()
133 if(TAR_LIMITED_ARGS)
134     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__TAR_LIMITED_ARGS__")
135     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__TAR_LIMITED_ARGS__")
136 endif()
138 if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
139     message("Please consider to switch to newer CMake")
140     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
141 endif()
143 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
144 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
145 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O2")
146 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O2")
148 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
149     set(APP_DIR ${CMAKE_BINARY_DIR}/install)
150     set(INSTALL_DIR ${APP_DIR}/${APP_NAME}.app/Contents/MacOS)
151     set(EXECUTABLE_NAME ${APP_NAME})
153 else()
154     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
155     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
156     set(INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
157     set(EXECUTABLE_NAME far2l)
159     if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
160         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--gc-sections")
161         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--gc-sections")
162     endif()
163 endif()
165 if (CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
166     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
167     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
168     message(STATUS "Running under cygwin, wow!")
169 endif()
171 if (CMAKE_SYSTEM_NAME MATCHES "Haiku")
172     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_DEFAULT_SOURCE -Wno-attributes")
173 endif()
175 set(CMAKE_CXX_VISIBILITY_PRESET hidden)
176 set(CMAKE_C_VISIBILITY_PRESET hidden)
178 if (LEGACY)
179     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPORT_REGISTRY")
180     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPORT_REGISTRY")
181     message(STATUS "Enabling registry support due to enabled LEGACY")
182 else()
183     message(STATUS "LEGACY is not enabled, your old registry settings will be forgotten, if any")
184 endif()
186 if(CMAKE_VERSION VERSION_GREATER "3.3")
187     cmake_policy(SET CMP0063 NEW)
188     cmake_policy(SET CMP0057 NEW)
189 endif()
191 include_directories(utils/include)
193 add_subdirectory (WinPort)
194 add_subdirectory (utils)
195 add_subdirectory (far2l)
197 if (NOT ${USEWX})
198     message(STATUS "Building without GUI/wxWidgets backend due to USEWX=${USEWX}")
199 else()
200     message(STATUS "Building with GUI/wxWidgets backend")
201     if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
202         if (DEFINED wxWidgets_CONFIG_EXECUTABLE)
203             message(STATUS "Using pre-defined wx config: ${wxWidgets_CONFIG_EXECUTABLE}")
205         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.2-config")
206             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.2-config")
207             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.2")
208             message(STATUS "Using known location of wx-config 3.2")
210         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.1-config")
211             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.1-config")
212             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.1")
213             message(STATUS "Using known location of wx-config 3.1")
215         elseif (EXISTS "/usr/local/bin/wxgtk3u-3.0-config")
216             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config")
217             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.0")
218             message(STATUS "Using known location of wx-config 3.0")
220         else()
221             message(STATUS "No wxgtk3u-3.*-config in expected locations")
222         endif()
224     elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
225         if (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
226             # MacPorts
227             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
228             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wxrc")
229             message(STATUS "Using known location of wx-config 3.2")
231         elseif (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
232             # MacPorts
233             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
234             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wxrc")
235             message(STATUS "Using known location of wx-config 3.1")
237         else()
238             message(STATUS "No wx-config in expected locations")
239         endif()
240     endif()
242     add_subdirectory(WinPort/src/Backend/WX)
243 endif()
245 if (NOT DEFINED TTYX)
246     find_package(X11)
247     if(X11_FOUND)
248         message(STATUS "Building with TTY X11 extensions due to X11 found")
249         add_subdirectory(WinPort/src/Backend/TTY/TTYX)
250     else()
251         message(STATUS "Building without TTY X11 extensions due to X11 not found")
252     endif()
253 elseif (TTYX)
254     message(STATUS "Building with TTY X11 extensions due to TTYX=${TTYX}")
255     add_subdirectory(WinPort/src/Backend/TTY/TTYX)
256 else()
257     message(STATUS "Building without TTY X11 extensions due to TTYX=${TTYX}")
258 endif()
261 ##############################
262 # plugins directives
264 if (NOT DEFINED ALIGN OR ALIGN)
265     message(STATUS "ALIGN plugin enabled")
266     add_subdirectory (align)
267 else()
268     message(STATUS "${ColorRed}ALIGN plugin disabled due to ALIGN=${ALIGN}${ColorNormal}")
269     install(CODE "
270         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/align/plug/align.far-plug-wide)
271         " COMPONENT system)
272 endif()
274 if (NOT DEFINED AUTOWRAP OR AUTOWRAP)
275     message(STATUS "AUTOWRAP plugin enabled")
276     add_subdirectory (autowrap)
277 else()
278     message(STATUS "${ColorRed}AUTOWRAP plugin disabled due to AUTOWRAP=${AUTOWRAP}${ColorNormal}")
279     install(CODE "
280         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/autowrap/plug/autowrap.far-plug-wide)
281         " COMPONENT system)
282 endif()
284 if (NOT DEFINED CALC OR CALC)
285     message(STATUS "CALC plugin enabled")
286     add_subdirectory (calc)
287 else()
288     message(STATUS "${ColorRed}CALC plugin disabled due to CALC=${CALC}${ColorNormal}")
289     install(CODE "
290         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/calc/plug/calc.far-plug-wide)
291         " COMPONENT system)
292 endif()
294 if (NOT DEFINED COLORER OR COLORER)
295     message(STATUS "COLORER plugin enabled")
296     add_subdirectory (colorer)
297 else()
298     message(STATUS "${ColorRed}COLORER plugin disabled due to COLORER=${COLORER}${ColorNormal}")
299     install(CODE "
300         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/colorer/plug/colorer.far-plug-wide)
301         " COMPONENT system)
302 endif()
304 if (NOT DEFINED COMPARE OR COMPARE)
305     message(STATUS "COMPARE plugin enabled")
306     add_subdirectory (compare)
307 else()
308     message(STATUS "${ColorRed}COMPARE plugin disabled due to COMPARE=${COMPARE}${ColorNormal}")
309     install(CODE "
310         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/compare/plug/compare.far-plug-wide)
311         " COMPONENT system)
312 endif()
314 if (NOT DEFINED DRAWLINE OR DRAWLINE)
315     message(STATUS "DRAWLINE plugin enabled")
316     add_subdirectory (drawline)
317 else()
318     message(STATUS "${ColorRed}DRAWLINE plugin disabled due to DRAWLINE=${DRAWLINE}${ColorNormal}")
319     install(CODE "
320         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/drawline/plug/drawline.far-plug-wide)
321         " COMPONENT system)
322 endif()
324 if (NOT DEFINED EDITCASE OR EDITCASE)
325     message(STATUS "EDITCASE plugin enabled")
326     add_subdirectory (editcase)
327 else()
328     message(STATUS "${ColorRed}EDITCASE plugin disabled due to EDITCASE=${EDITCASE}${ColorNormal}")
329     install(CODE "
330         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editcase/plug/editcase.far-plug-wide)
331         " COMPONENT system)
332 endif()
334 if (NOT DEFINED EDITORCOMP OR EDITORCOMP)
335     message(STATUS "EDITORCOMP plugin enabled")
336     add_subdirectory (editorcomp)
337 else()
338     message(STATUS "${ColorRed}EDITORCOMP plugin disabled due to EDITORCOMP=${EDITORCOMP}${ColorNormal}")
339     install(CODE "
340         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editorcomp/plug/editorcomp.far-plug-wide)
341         " COMPONENT system)
342 endif()
344 if (DEFINED FARFTP AND FARFTP)
345     message(STATUS "FARFTP plugin enabled (obsolete)")
346     add_subdirectory (FARStdlib)
347     add_subdirectory (farftp)
348 else()
349     install(CODE "
350         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/farftp/plug/farftp.far-plug-mb)
351         " COMPONENT system)
352 endif()
354 if (NOT DEFINED FILECASE OR FILECASE)
355     message(STATUS "FILECASE plugin enabled")
356     add_subdirectory (filecase)
357 else()
358     message(STATUS "${ColorRed}FILECASE plugin disabled due to FILECASE=${FILECASE}${ColorNormal}")
359     install(CODE "
360         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/filecase/plug/filecase.far-plug-wide)
361         " COMPONENT system)
362 endif()
364 if (NOT DEFINED INCSRCH OR INCSRCH)
365     message(STATUS "INCSRCH plugin enabled")
366     add_subdirectory (incsrch)
367 else()
368     message(STATUS "${ColorRed}Building without <INCSRCH> plugin due to INCSRCH=${INCSRCH}${ColorNormal}")
369     install(CODE "
370         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/incsrch/plug/incsrch.far-plug-wide)
371         " COMPONENT system)
372 endif()
374 if (NOT DEFINED INSIDE OR INSIDE)
375     message(STATUS "INSIDE plugin enabled")
376     add_subdirectory (inside)
377 else()
378     message(STATUS "${ColorRed}INSIDE plugin disabled due to INSIDE=${INSIDE}${ColorNormal}")
379     install(CODE "
380         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/inside/plug/inside.far-plug-mb)
381         " COMPONENT system)
382 endif()
384 if (NOT DEFINED MULTIARC OR MULTIARC)
385     message(STATUS "MULTIARC plugin enabled")
386     find_package(PkgConfig REQUIRED)
387     pkg_search_module(LibArchive QUIET libarchive)
388     if(NOT LibArchive_FOUND)
389         message(WARNING "${ColorRed}libarchive not found, multiarc will have weaker archives support. Its recommended to install libarchive-dev and reconfigure far2l.${ColorNormal}")
390     endif()
392     pkg_search_module(PCRE QUIET libpcre)
393     if(NOT PCRE_FOUND)
394         message(WARNING "${ColorRed}libpcre not found, multiarc will have no regexp support in custom archive format descriptions. Install libpcre and reconfigure far2l if you need that functionality.${ColorNormal}")
395     endif()
397     add_subdirectory (multiarc)
398 else()
399     message(STATUS "${ColorRed}MULTIARC plugin disabled due to MULTIARC=${MULTIARC}${ColorNormal}")
400     install(CODE "
401         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/multiarc/plug/multiarc.far-plug-mb)
402         " COMPONENT system)
403 endif()
405 if (NOT DEFINED NETROCKS OR NETROCKS)
406     message(STATUS "NETROCKS plugin enabled")
407     find_package(OpenSSL)
408     if(OPENSSL_FOUND)
409         message(STATUS "OpenSSL found -> enjoy FTPS support in NetRocks")
410     else()
411         message(WARNING "${ColorRed}OpenSSL not found, NetRocks will not have FTPS protocol support. Install libssl-dev if you want FTPS protocol available in NetRocks.${ColorNormal}")
412     endif(OPENSSL_FOUND)
414     find_package(LibSSH 0.5.0)
415     if(LIBSSH_FOUND)
416         message(STATUS "libssh found -> enjoy SFTP support in NetRocks")
417     else()
418         message(WARNING "${ColorRed}libssh not found, NetRocks will not have SFTP protocol support. Install libssh-dev if you want SFTP protocol available in NetRocks.${ColorNormal}")
419     endif(LIBSSH_FOUND)
421     find_package(Libsmbclient)
422     if(LIBSMBCLIENT_FOUND)
423         message(STATUS "libsmbclient found -> enjoy SMB support in NetRocks")
424     else()
425         message(WARNING "${ColorRed}libsmbclient not found, NetRocks will not have SMB protocol support. Install libsmbclient-dev if you want SMB protocol available in NetRocks.${ColorNormal}")
426     endif(LIBSMBCLIENT_FOUND)
428     find_package(LibNfs)
429     if(LIBNFS_FOUND)
430         message(STATUS "libnfs found -> enjoy NFS support in NetRocks")
431     else()
432         message(WARNING "${ColorRed}libnfs not found, NetRocks will not have NFS protocol support. Install libnfs-dev if you want NFS protocol available in NetRocks.${ColorNormal}")
433     endif(LIBNFS_FOUND)
435     find_package(LibNEON)
436     if(LIBNEON_FOUND)
437         message(STATUS "libneon found -> enjoy WebDav support in NetRocks")
438     else()
439         message(WARNING "${ColorRed}libneon not found, NetRocks will not have WebDav protocol support. Install libneon*-dev if you want WebDav protocol available in NetRocks.${ColorNormal}")
440     endif(LIBNEON_FOUND)
442     add_subdirectory (NetRocks)
443 else()
444     message(STATUS "${ColorRed}NETROCKS plugin disabled due to NETROCKS=${NETROCKS}${ColorNormal}")
445     install(CODE "
446         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/NetRocks/plug/NetRocks.far-plug-wide)
447         " COMPONENT system)
448 endif()
450 if (DEFINED VIRTUAL_PYTHON)
451     message(STATUS "PYTHON plugin with interpreter from virtualenv enabled")
452     add_subdirectory (python)
453     # Copy this explicitly cuz generic copier command excludes 'far2l'
454     install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
455         DESTINATION "lib/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
456         COMPONENT base FILES_MATCHING
457         PATTERN "*")
458 else()
459     if (DEFINED PYTHON AND PYTHON)
460         find_package(Python3 COMPONENTS Interpreter Development)
462         if(Python3_FOUND AND Python3_Development_FOUND)
463             message(STATUS "PYTHON plugin enabled")
464             add_subdirectory (python)
465             install(CODE "
466                 execute_process(COMMAND echo Python: preparing virtual environment)
467                 " COMPONENT system)
468             install(CODE "
469                 execute_process(COMMAND ${Python3_EXECUTABLE} -m venv --system-site-packages ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python)
470                 " COMPONENT system)
471             install(CODE "
472                 execute_process(COMMAND echo Python: installing packages)
473                 " COMPONENT system)
474             install(CODE "
475                 execute_process(COMMAND ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python/bin/python -m pip install cffi debugpy)
476                 " COMPONENT system)
478             # Copy this explicitly cuz generic copier command excludes 'far2l'
479             install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
480                 DESTINATION "lib/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
481                 COMPONENT base FILES_MATCHING
482                 PATTERN "*")
483         else()
484             message(WARNING "${ColorRed}PYTHON plugin disabled due to missing python3 environment${ColorNormal}")
485         endif ()
487     else()
488         message(STATUS "${ColorRed}PYTHON plugin disabled, use -DPYTHON=yes if you need it${ColorNormal}")
489         install(CODE "
490             execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python.far-plug-wide)
491             " COMPONENT system)
492     endif()
493 endif()
495 if (NOT DEFINED SIMPLEINDENT OR SIMPLEINDENT)
496     message(STATUS "SIMPLEINDENT plugin enabled")
497     add_subdirectory (SimpleIndent)
498 else()
499     message(STATUS "${ColorRed}SIMPLEINDENT plugin disabled due to SIMPLEINDENT=${SIMPLEINDENT}${ColorNormal}")
500     install(CODE "
501         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/SimpleIndent/plug/SimpleIndent.far-plug-wide)
502         " COMPONENT system)
503 endif()
505 if (NOT DEFINED TMPPANEL OR TMPPANEL)
506     message(STATUS "TMPPANEL plugin enabled")
507     add_subdirectory (tmppanel)
508 else()
509     message(STATUS "${ColorRed}TMPPANEL plugin disabled due to TMPPANEL=${TMPPANEL}${ColorNormal}")
510     install(CODE "
511         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/tmppanel/plug/tmppanel.far-plug-wide)
512         " COMPONENT system)
513 endif()
515 ##############################
516 # common install directives
518 add_subdirectory (packaging)
520 add_subdirectory(man)
522 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
523     set(FIXUP_SCRIPT packaging/osx/FixupBundle.cmake)
524     configure_file(${FIXUP_SCRIPT}.in ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} @ONLY)
525     install(DIRECTORY ${APP_DIR}/${APP_NAME}.app DESTINATION . USE_SOURCE_PERMISSIONS COMPONENT app EXCLUDE_FROM_ALL)
526     install(SCRIPT ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} COMPONENT app EXCLUDE_FROM_ALL)
527 endif()
529 install(PROGRAMS "${INSTALL_DIR}/${EXECUTABLE_NAME}" DESTINATION "bin" RENAME far2l COMPONENT base)
531 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "lib/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
532     PATTERN "colorer/base" EXCLUDE
533     PATTERN "far2l_gui.so"
534     PATTERN "far2l_ttyx.broker"
535     PATTERN "plug/*.far-plug-*"
536     PATTERN "plug/*.broker"
539 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "share/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
540     PATTERN "${EXECUTABLE_NAME}" EXCLUDE
541     PATTERN "far2ledit" EXCLUDE
542     PATTERN "far2l_*" EXCLUDE
543     PATTERN "*.far-plug-*" EXCLUDE
544     PATTERN "*.broker" EXCLUDE
545     PATTERN "python/plug/python" EXCLUDE
546     PATTERN "*"
549 # setup some symlinks and remove deprecated stuff from previous installation
550 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l/far2l_askpass)
551 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l/far2l_sudoapp)
552 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink far2l ${PROJECT_BINARY_DIR}/far2l/far2ledit)
553 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2l_askpass" DESTINATION "lib/far2l" COMPONENT system)
554 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2l_sudoapp" DESTINATION "lib/far2l" COMPONENT system)
555 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2ledit" DESTINATION "bin" COMPONENT base)
556 install(CODE "
557     execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f \"\${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/objinfo/plug/objinfo.far-plug-mb\")
558     " COMPONENT system)