Merge pull request #1486 from cycleg/issue-1485
[far2l.git] / CMakeLists.txt
blob36554c6e824c0ddd75aa446bad68ebb2f78f7773
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}" rev-parse --short HEAD
49                                 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
50                                 OUTPUT_VARIABLE GIT_HASH
51                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
52         endif()
53         if(NOT "${GIT_HASH}" STREQUAL "")
54                 message(STATUS "git hash: ${GIT_HASH}")
55                 set(VERSION_PATCH "${VERSION_PATCH}-${GIT_HASH}")
56         else()
57                 message(WARNING "git information unavailable, assuming its a build from v_${VERSION}")
58         endif()
59 endif()
61 set(VERSION_PATCH "${VERSION_PATCH}-beta")
63 set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
65 set(CMAKE_CXX_STANDARD_REQUIRED ON)
66 set(CMAKE_CXX_STANDARD 11)
67 set(CMAKE_CXX_EXTENSIONS OFF)
69 if(NOT CMAKE_BUILD_TYPE)
70    set(CMAKE_BUILD_TYPE "Release")
71 endif()
73 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE} Version: ${VERSION}")
75 if(NOT DEFINED CMAKE_INSTALL_PREFIX)
76    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
77       set(CMAKE_INSTALL_PREFIX "/usr/local")
78    elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
79       set(CMAKE_INSTALL_PREFIX "/usr/local")
80    else()
81       set(CMAKE_INSTALL_PREFIX "/usr")
82    endif()
83 endif()
85 ##############################
87 if (NOT DEFINED USEWX)
88         set(USEWX "YES")
89 endif()
91 # EACP disabled by default for now as FAR's GetCodePageInfo rejects all multibyte charsets due to BUGBUG.
92 # Uncomment EACP-stuff here when that will be fixed. See https://github.com/elfmz/far2l/issues/1179
93 #if (NOT DEFINED EACP)
94 #       set(EACP "YES")
95 #endif()
97 if (NOT DEFINED LEGACY)
98         # TODO: default it to NO  somewhere in 2022, after all obsolete settings
99         # registry-upgrade-to-ini stuff will be safe to remove
100         set(LEGACY "YES")
101 elseif(FARFTP)
102         set(LEGACY "YES")
103         message(STATUS "Force-enable LEGACY due to enabled FARFTP")
104 endif()
106 #if (NOT EACP)
107 #       message(STATUS "${ColorRed}Building without East Asian codepages support due to EACP=${EACP}${ColorNormal}")
108 #endif()
110 if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
111     set(M4_NAME gm4)
112 else()
113     set(M4_NAME m4)
114 endif()
116 find_program(M4_PROG NAMES ${M4_NAME})
118 if(NOT M4_PROG)
119     message(FATAL_ERROR "${ColorRed}${M4_NAME} not found - please install it${ColorNormal}")
120 endif ()
121 set(M4 ${M4_PROG} -P "-DARCH=${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}" "-DMAJOR=${VERSION_MAJOR}" "-DMINOR=${VERSION_MINOR}" "-DPATCH=${VERSION_PATCH}")
123 # set(RM rm) actually not needed: use $(CMAKE_COMMAND) -E remove
124 find_program (GAWK NAMES gawk)
125 if(NOT GAWK)
126   message(FATAL_ERROR "${ColorRed}gawk not found - please install it${ColorNormal}")
127 endif ()
129 if(MUSL)
130         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__MUSL__")
131         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__MUSL__")
132 endif()
134 if(TAR_LIMITED_ARGS)
135         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__TAR_LIMITED_ARGS__")
136         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__TAR_LIMITED_ARGS__")
137 endif()
139 if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
140     message("Please consider to switch to newer CMake")
141         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
142 endif()
144 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
145 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
146 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O2")
147 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O2")
149 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
150         set(APP_DIR ${CMAKE_BINARY_DIR}/install)
151         set(INSTALL_DIR ${APP_DIR}/${APP_NAME}.app/Contents/MacOS)
152         set(EXECUTABLE_NAME ${APP_NAME})
154 else()
155         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
156         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
157         set(INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
158         set(EXECUTABLE_NAME far2l)
160         if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
161                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--gc-sections")
162                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--gc-sections")
163         endif()
164 endif()
166 if (CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
167   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
168   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
169   message(STATUS "Running under cygwin, wow!")
170 endif()
172 if (CMAKE_SYSTEM_NAME MATCHES "Haiku")
173   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_DEFAULT_SOURCE -Wno-attributes")
174 endif()
176 set(CMAKE_CXX_VISIBILITY_PRESET hidden)
177 set(CMAKE_C_VISIBILITY_PRESET hidden)
179 if (LEGACY)
180         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPORT_REGISTRY")
181         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPORT_REGISTRY")
182         message(STATUS "Enabling registry support due to enabled LEGACY")
183 else()
184         message(STATUS "LEGACY is not enabled, your old registry settings will be forgotten, if any")
185 endif()
187 if(CMAKE_VERSION VERSION_GREATER "3.3")
188   cmake_policy(SET CMP0063 NEW)
189   cmake_policy(SET CMP0057 NEW)
190 endif()
192 include_directories(utils/include)
194 add_subdirectory (WinPort)
195 add_subdirectory (utils)
196 add_subdirectory (far2l)
198 if (NOT ${USEWX})
199         message(STATUS "Building without GUI/wxWidgets backend due to USEWX=${USEWX}")
200 else()
201         message(STATUS "Building with GUI/wxWidgets backend")
202         add_subdirectory(WinPort/src/Backend/WX)
203 endif()
205 if (NOT DEFINED TTYX)
206         find_package(X11)
207         if(X11_FOUND)
208                 message(STATUS "Building with TTY X11 extensions due to X11 found")
209                 add_subdirectory(WinPort/src/Backend/TTY/TTYX)
210         else()
211                 message(STATUS "Building without TTY X11 extensions due to X11 not found")
212         endif()
213 elseif (TTYX)
214         message(STATUS "Building with TTY X11 extensions due to TTYX=${TTYX}")
215         add_subdirectory(WinPort/src/Backend/TTY/TTYX)
216 else()
217         message(STATUS "Building without TTY X11 extensions due to TTYX=${TTYX}")
218 endif()
221 ##############################
222 # plugins directives
224 if (NOT DEFINED ALIGN OR ALIGN)
225         message(STATUS "ALIGN plugin enabled")
226         add_subdirectory (align)
227 else()
228         message(STATUS "${ColorRed}ALIGN plugin disabled due to ALIGN=${ALIGN}${ColorNormal}")
229         install(CODE "
230                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/align/plug/align.far-plug-wide)
231                 " COMPONENT system)
232 endif()
234 if (NOT DEFINED AUTOWRAP OR AUTOWRAP)
235         message(STATUS "AUTOWRAP plugin enabled")
236         add_subdirectory (autowrap)
237 else()
238         message(STATUS "${ColorRed}AUTOWRAP plugin disabled due to AUTOWRAP=${AUTOWRAP}${ColorNormal}")
239         install(CODE "
240                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/autowrap/plug/autowrap.far-plug-wide)
241                 " COMPONENT system)
242 endif()
244 if (NOT DEFINED CALC OR CALC)
245         message(STATUS "CALC plugin enabled")
246         add_subdirectory (calc)
247 else()
248         message(STATUS "${ColorRed}CALC plugin disabled due to CALC=${CALC}${ColorNormal}")
249         install(CODE "
250                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/calc/plug/calc.far-plug-wide)
251                 " COMPONENT system)
252 endif()
254 if (NOT DEFINED COLORER OR COLORER)
255         message(STATUS "COLORER plugin enabled")
256         add_subdirectory (colorer)
257 else()
258         message(STATUS "${ColorRed}COLORER plugin disabled due to COLORER=${COLORER}${ColorNormal}")
259         install(CODE "
260                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/colorer/plug/colorer.far-plug-wide)
261                 " COMPONENT system)
262 endif()
264 if (NOT DEFINED COMPARE OR COMPARE)
265         message(STATUS "COMPARE plugin enabled")
266         add_subdirectory (compare)
267 else()
268         message(STATUS "${ColorRed}COMPARE plugin disabled due to COMPARE=${COMPARE}${ColorNormal}")
269         install(CODE "
270                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/compare/plug/compare.far-plug-wide)
271                 " COMPONENT system)
272 endif()
274 if (NOT DEFINED DRAWLINE OR DRAWLINE)
275         message(STATUS "DRAWLINE plugin enabled")
276         add_subdirectory (drawline)
277 else()
278         message(STATUS "${ColorRed}DRAWLINE plugin disabled due to DRAWLINE=${DRAWLINE}${ColorNormal}")
279         install(CODE "
280                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/drawline/plug/drawline.far-plug-wide)
281                 " COMPONENT system)
282 endif()
284 if (NOT DEFINED EDITCASE OR EDITCASE)
285         message(STATUS "EDITCASE plugin enabled")
286         add_subdirectory (editcase)
287 else()
288         message(STATUS "${ColorRed}EDITCASE plugin disabled due to EDITCASE=${EDITCASE}${ColorNormal}")
289         install(CODE "
290                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editcase/plug/editcase.far-plug-wide)
291                 " COMPONENT system)
292 endif()
294 if (NOT DEFINED EDITORCOMP OR EDITORCOMP)
295         message(STATUS "EDITORCOMP plugin enabled")
296         add_subdirectory (editorcomp)
297 else()
298         message(STATUS "${ColorRed}EDITORCOMP plugin disabled due to EDITORCOMP=${EDITORCOMP}${ColorNormal}")
299         install(CODE "
300                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editorcomp/plug/editorcomp.far-plug-wide)
301                 " COMPONENT system)
302 endif()
304 if (DEFINED FARFTP AND FARFTP)
305         message(STATUS "FARFTP plugin enabled (obsolete)")
306         add_subdirectory (FARStdlib)
307         add_subdirectory (farftp)
308 else()
309         install(CODE "
310                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/farftp/plug/farftp.far-plug-mb)
311                 " COMPONENT system)
312 endif()
314 if (NOT DEFINED FILECASE OR FILECASE)
315         message(STATUS "FILECASE plugin enabled")
316         add_subdirectory (filecase)
317 else()
318         message(STATUS "${ColorRed}FILECASE plugin disabled due to FILECASE=${FILECASE}${ColorNormal}")
319         install(CODE "
320                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/filecase/plug/filecase.far-plug-wide)
321                 " COMPONENT system)
322 endif()
324 if (NOT DEFINED INCSRCH OR INCSRCH)
325         message(STATUS "INCSRCH plugin enabled")
326         add_subdirectory (incsrch)
327 else()
328         message(STATUS "${ColorRed}Building without <INCSRCH> plugin due to INCSRCH=${INCSRCH}${ColorNormal}")
329         install(CODE "
330                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/incsrch/plug/incsrch.far-plug-wide)
331                 " COMPONENT system)
332 endif()
334 if (NOT DEFINED INSIDE OR INSIDE)
335         message(STATUS "INSIDE plugin enabled")
336         add_subdirectory (inside)
337 else()
338         message(STATUS "${ColorRed}INSIDE plugin disabled due to INSIDE=${INSIDE}${ColorNormal}")
339         install(CODE "
340                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/inside/plug/inside.far-plug-mb)
341                 " COMPONENT system)
342 endif()
344 if (NOT DEFINED MULTIARC OR MULTIARC)
345         message(STATUS "MULTIARC plugin enabled")
346         # workaround for brew's/macports' libarchive
347         if(IS_DIRECTORY "/usr/local/opt/libarchive/include")
348                 set(LibArchive_INCLUDE_DIR "/usr/local/opt/libarchive/include")
349                 set(LibArchive_LIBRARY "/usr/local/opt/libarchive/lib/libarchive.dylib")
350         elseif(EXISTS "/opt/local/lib/libarchive.dylib")
351                 set(LibArchive_LIBRARY "/opt/local/lib/libarchive.dylib")
352         endif()
354         find_package(LibArchive)
355         if(NOT LibArchive_FOUND)
356                 message(WARNING "${ColorRed}libarchive not found, multiarc will have weaker archives support. Its recommended to install libarchive-dev and reconfigure far2l.${ColorNormal}")
357         endif()
359         find_package(PCRE)
360         if(NOT PCRE_FOUND)
361                 message(WARNING "${ColorRed}libpcre not found, multiarc will have no custom archives support. Install libpcre and reconfigure far2l if you need that functionality.${ColorNormal}")
362         endif()
364         add_subdirectory (multiarc)
365 else()
366         message(STATUS "${ColorRed}MULTIARC plugin disabled due to MULTIARC=${MULTIARC}${ColorNormal}")
367         install(CODE "
368                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/multiarc/plug/multiarc.far-plug-mb)
369                 " COMPONENT system)
370 endif()
372 if (NOT DEFINED NETROCKS OR NETROCKS)
373         message(STATUS "NETROCKS plugin enabled")
374         if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
375                 # workaround for brew/macports vs system openssl conflicts
376                 if(IS_DIRECTORY "/usr/local/opt/openssl@1.1/include" AND IS_DIRECTORY "/usr/local/opt/openssl@1.1/lib")
377                         set(OPENSSL_LIBRARIES "/usr/local/opt/openssl@1.1/lib/libcrypto.dylib;/usr/local/opt/openssl@1.1/lib/libssl.dylib")
378                         set(OPENSSL_INCLUDE_DIRS "/usr/local/opt/openssl@1.1/include")
379                 elseif(EXISTS "/opt/local/lib/libssl.dylib" AND IS_DIRECTORY "/opt/local/include/openssl")
380                         set(OPENSSL_LIBRARIES "/opt/local//lib/libcrypto.dylib;/opt/local/lib/libssl.dylib")
381                         set(OPENSSL_INCLUDE_DIRS "/opt/local/include")
382                 endif()
383         endif()
385         find_package(OpenSSL)
386         if(OPENSSL_FOUND)
387                 message(STATUS "OpenSSL found -> enjoy FTPS support in NetRocks")
388         else()
389                 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}")
390         endif(OPENSSL_FOUND)
392         find_package(LibSSH 0.5.0)
393         if(LIBSSH_FOUND)
394                 message(STATUS "libssh found -> enjoy SFTP support in NetRocks")
395         else()
396                 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}")
397         endif(LIBSSH_FOUND)
399         find_package(Libsmbclient)
400         if(LIBSMBCLIENT_FOUND)
401                 message(STATUS "libsmbclient found -> enjoy SMB support in NetRocks")
402         else()
403                 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}")
404         endif(LIBSMBCLIENT_FOUND)
406         find_package(LibNfs)
407         if(LIBNFS_FOUND)
408                 message(STATUS "libnfs found -> enjoy NFS support in NetRocks")
409         else()
410                 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}")
411         endif(LIBNFS_FOUND)
413         find_package(LibNEON)
414         if(LIBNEON_FOUND)
415                 message(STATUS "libneon found -> enjoy WebDav support in NetRocks")
416         else()
417                 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}")
418         endif(LIBNEON_FOUND)
420         add_subdirectory (NetRocks)
421 else()
422         message(STATUS "${ColorRed}NETROCKS plugin disabled due to NETROCKS=${NETROCKS}${ColorNormal}")
423         install(CODE "
424                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/NetRocks/plug/NetRocks.far-plug-wide)
425                 " COMPONENT system)
426 endif()
428 if (DEFINED PYTHON AND PYTHON)
429         find_package(PythonLibs 3.0)
431         if(PYTHONLIBS_FOUND)
432                 find_program (PYTHON3 NAMES python3)
433                 if(PYTHON3)
434                         message(STATUS "PYTHON plugin enabled")
435                         add_subdirectory (python)
436                 else()
437                         message(WARNING "${ColorRed}PYTHON plugin disabled due to missing python3 ${ColorNormal}")
438                 endif ()
439         else()
440                 message(WARNING "${ColorRed}PYTHON plugin disabled due to Python libraries not found${ColorNormal}")
441         endif()
443         install(CODE "
444                 execute_process(COMMAND echo Python: preparing virtual environment)
445                 " COMPONENT system)
446         install(CODE "
447                 execute_process(COMMAND ${PYTHON3} -m venv --system-site-packages ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python)
448                 " COMPONENT system)
449         install(CODE "
450                 execute_process(COMMAND echo Python: installing packages)
451                 " COMPONENT system)
452         install(CODE "
453                 execute_process(COMMAND ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python/bin/python -m pip install cffi debugpy)
454                 " COMPONENT system)
456         # Copy this explicitly cuz generic copier command excludes 'far2l'
457         install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
458                 DESTINATION "share/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
459                 COMPONENT base FILES_MATCHING
460                 PATTERN "*")
462 else()
463         message(STATUS "${ColorRed}PYTHON plugin disabled, use -DPYTHON=yes if you need it${ColorNormal}")
464         install(CODE "
465                 execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python.far-plug-wide)
466                 " COMPONENT system)
467 endif()
469 if (NOT DEFINED SIMPLEINDENT OR SIMPLEINDENT)
470         message(STATUS "SIMPLEINDENT plugin enabled")
471         add_subdirectory (SimpleIndent)
472 else()
473         message(STATUS "${ColorRed}SIMPLEINDENT plugin disabled due to SIMPLEINDENT=${SIMPLEINDENT}${ColorNormal}")
474         install(CODE "
475                 execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/SimpleIndent/plug/SimpleIndent.far-plug-wide)
476                 " COMPONENT system)
477 endif()
479 if (NOT DEFINED TMPPANEL OR TMPPANEL)
480         message(STATUS "TMPPANEL plugin enabled")
481         add_subdirectory (tmppanel)
482 else()
483         message(STATUS "${ColorRed}TMPPANEL plugin disabled due to TMPPANEL=${TMPPANEL}${ColorNormal}")
484         install(CODE "
485                 execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/tmppanel/plug/tmppanel.far-plug-wide)
486                 " COMPONENT system)
487 endif()
489 ##############################
490 # common install directives
492 add_subdirectory (packaging)
494 add_subdirectory(man)
496 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
497         set(FIXUP_SCRIPT packaging/osx/FixupBundle.cmake)
498         configure_file(${FIXUP_SCRIPT} ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} @ONLY)
499         install(DIRECTORY ${APP_DIR}/${APP_NAME}.app DESTINATION . USE_SOURCE_PERMISSIONS COMPONENT app EXCLUDE_FROM_ALL)
500         install(SCRIPT ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} COMPONENT app EXCLUDE_FROM_ALL)
501 endif()
503 install(PROGRAMS "${INSTALL_DIR}/${EXECUTABLE_NAME}" DESTINATION "bin" RENAME far2l COMPONENT base)
505 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "lib/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
506         PATTERN "colorer/base" EXCLUDE
507         PATTERN "far2l_gui.so"
508         PATTERN "far2l_ttyx.broker"
509         PATTERN "plug/*.far-plug-*"
510         PATTERN "plug/*.broker")
512 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "share/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
513         PATTERN "${EXECUTABLE_NAME}" EXCLUDE
514         PATTERN "far2l_*" EXCLUDE
515         PATTERN "*.far-plug-*" EXCLUDE
516         PATTERN "*.broker" EXCLUDE
517         PATTERN "python/plug/python" EXCLUDE
518         PATTERN "*")
520 # setup some symlinks and remove deprecated stuff from previous installation
521 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l_askpass)
522 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l_sudoapp)
523 install(FILES "${PROJECT_BINARY_DIR}/far2l_askpass" DESTINATION "lib/far2l" COMPONENT system)
524 install(FILES "${PROJECT_BINARY_DIR}/far2l_sudoapp" DESTINATION "lib/far2l" COMPONENT system)
525 install(CODE "
526         execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f \"\${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/objinfo/plug/objinfo.far-plug-mb\")
527         " COMPONENT system)