Merge pull request #2005 from michaellukashov/fix-resource-leak
[far2l.git] / far2l / CMakeLists.txt
blob6fb5135a11db91483c7bd617d457ec8891e40890
1 project(far2l)
3 add_subdirectory (bootstrap)
5 set(SOURCES
6 src/farversion.cpp
7 src/cache.cpp
8 src/clipboard.cpp
9 src/cmdline.cpp
10 src/copy.cpp
11 src/ctrlobj.cpp
12 src/datetime.cpp
13 src/delete.cpp
14 src/dialog.cpp
15 src/dirinfo.cpp
16 src/dizlist.cpp
17 src/DialogBuilder.cpp
18 src/dlgedit.cpp
19 src/DlgGuid.cpp
20 src/edit.cpp
21 src/editor.cpp
22 src/EditorConfigOrg.cpp
23 src/execute.cpp
24 src/farwinapi.cpp
25 src/fileattr.cpp
26 src/fileedit.cpp
27 src/filefilter.cpp
28 src/filefilterparams.cpp
29 src/FilesSuggestor.cpp
30 src/fileowner.cpp
31 src/filepanels.cpp
32 src/filestr.cpp
33 src/filetype.cpp
34 src/fileview.cpp
35 src/findfile.cpp
36 src/FindPattern.cpp
37 src/flink.cpp
38 src/fnparce.cpp
39 src/foldtree.cpp
40 src/frame.cpp
41 src/global.cpp
42 src/help.cpp
43 src/hilight.cpp
44 src/hmenu.cpp
45 src/Mounts.cpp
46 src/keybar.cpp
47 src/main.cpp
48 src/manager.cpp
49 src/menubar.cpp
50 src/message.cpp
51 src/mkdir.cpp
52 src/modal.cpp
53 src/namelist.cpp
54 src/options.cpp
55 src/plist.cpp
56 src/rdrwdsk.cpp
57 src/RefreshFrameManager.cpp
58 src/scantree.cpp
59 src/setattr.cpp
60 src/setcolor.cpp
61 src/stddlg.cpp
62 src/synchro.cpp
63 src/syslog.cpp
64 src/TPreRedrawFunc.cpp
65 src/usermenu.cpp
66 src/viewer.cpp
67 src/vmenu.cpp
68 src/execute_oscmd.cpp
69 src/ViewerStrings.cpp
70 src/ViewerPrinter.cpp
71 src/fileholder.cpp
72 src/GrepFile.cpp
74 src/panels/panel.cpp
75 src/panels/filelist.cpp
76 src/panels/fldata.cpp
77 src/panels/flmodes.cpp
78 src/panels/flplugin.cpp
79 src/panels/flshow.cpp
80 src/panels/flupdate.cpp
81 src/panels/infolist.cpp
82 src/panels/qview.cpp
83 src/panels/treelist.cpp
85 src/console/AnsiEsc.cpp
86 src/console/keyboard.cpp
87 src/console/console.cpp
88 src/console/constitle.cpp
89 src/console/interf.cpp
90 src/console/grabber.cpp
91 src/console/lockscrn.cpp
92 src/console/palette.cpp
93 src/console/savescr.cpp
94 src/console/scrbuf.cpp
95 src/console/scrobj.cpp
96 src/console/scrsaver.cpp
98 src/filemask/CFileMask.cpp
99 src/filemask/FileMasksProcessor.cpp
100 src/filemask/FileMasksWithExclude.cpp
102 src/locale/codepage.cpp
103 src/locale/DetectCodepage.cpp
104 src/locale/xlat.cpp
105 src/locale/locale.cpp
107 src/bookmarks/Bookmarks.cpp
108 src/bookmarks/BookmarksMenu.cpp
109 src/bookmarks/BookmarksLegacy.cpp
111 src/cfg/AllXLats.cpp
112 src/cfg/config.cpp
113 src/cfg/ConfigOpt.cpp
114 src/cfg/ConfigOptEdit.cpp
115 src/cfg/ConfigRW.cpp
116 src/cfg/ConfigLegacy.cpp
117 src/cfg/HotkeyLetterDialog.cpp
118 src/cfg/language.cpp
120 src/hist/history.cpp
121 src/hist/poscache.cpp
123 src/plug/plugapi.cpp
124 src/plug/plugins.cpp
125 src/plug/PluginW.cpp
126 src/plug/PluginA.cpp
127 src/plug/plclass.cpp
129 src/vt/vtansi.cpp
130 src/vt/vtshell.cpp
131 src/vt/vtshell_translation.cpp
132 src/vt/vtshell_compose.cpp
133 src/vt/vtshell_leader.cpp
134 src/vt/vtshell_ioreaders.cpp
135 src/vt/vtshell_mouse.cpp
136 src/vt/vtlog.cpp
137 src/vt/vtcompletor.cpp
138 src/vt/VTFar2lExtensios.cpp
140 src/base/InterThreadCall.cpp
141 src/base/SafeMMap.cpp
142 src/base/farqueue.cpp
143 src/base/FARString.cpp
144 src/base/farrtl.cpp
145 src/base/DList.cpp
147 src/mix/format.cpp
148 src/mix/udlist.cpp
149 src/mix/cvtname.cpp
150 src/mix/cddrv.cpp
151 src/mix/chgprior.cpp
152 src/mix/MountInfo.cpp
153 src/mix/dirmix.cpp
154 src/mix/drivemix.cpp
155 src/mix/mix.cpp
156 src/mix/panelmix.cpp
157 src/mix/pathmix.cpp
158 src/mix/processname.cpp
159 src/mix/RegExp.cpp
160 src/mix/strmix.cpp
161 src/mix/FSFileFlags.cpp
162 src/mix/StrCells.cpp
163 src/mix/ChunkedData.cpp
164 src/mix/UsedChars.cpp
165 src/mix/CachedCreds.cpp
168 # Option to disable building macro subsystem completely
169 option(FAR2MACRO "Use Far 2 macro engine" ON)
171 # Option to keep TVar implementation even if Far2 marco subsystem is not used
172 # (as it may be needed by alternative macro subsystem implementations)
173 option(FAR2TVAR  "Use Far 2 TVar" ON)
175 if(FAR2MACRO)
176     list(APPEND SOURCES src/macro/chgmmode.cpp)
177     list(APPEND SOURCES src/macro/macro.cpp)
178     list(APPEND SOURCES src/macro/syntax.cpp)
179     list(APPEND SOURCES src/macro/tvar.cpp)
180 else()
181     if(FAR2TVAR)
182         list(APPEND SOURCES src/macro/tvar.cpp)
183         add_compile_definitions(FAR2TVAR)
184     endif()
185     list(APPEND SOURCES src/macro/nomacro.cpp)
186 endif()
188 # Set target names for the executables
189 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
190     set(MACOSX_BUNDLE_LONG_VERSION_STRING ${VERSION})
191     set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION})
192     set(MACOSX_BUNDLE_GUI_IDENTIFIER ${APP_IDENTIFIER})
193     set(MACOSX_BUNDLE_ICON_FILE "Far.icns")
194     set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_NAME})
195     add_executable(far2l MACOSX_BUNDLE ${SOURCES} "DE/Far.icns")
196     set_target_properties(far2l PROPERTIES
197         OUTPUT_NAME ${APP_NAME}
198         RUNTIME_OUTPUT_DIRECTORY ${APP_DIR})
199     set_source_files_properties("DE/Far.icns" PROPERTIES
200         MACOSX_PACKAGE_LOCATION Resources)
201 else()
202     add_executable(far2l ${SOURCES})
203     set_target_properties(far2l PROPERTIES
204         RUNTIME_OUTPUT_DIRECTORY "${INSTALL_DIR}")
205 endif()
207 if (NOT DEFINED USEUCD)
208     set(USEUCD "YES")
209 endif()
211 if (NOT USEUCD)
212     message(STATUS "Building without libuchardet due to USEUCD=${USEUCD}")
213 else()
214     message(STATUS "Building with libuchardet")
215     find_package(Uchardet REQUIRED)
216     target_compile_definitions(far2l PRIVATE -DUSEUCD)
217 endif()
219 target_compile_definitions(far2l PRIVATE -DUNICODE)
221 target_include_directories(far2l PRIVATE
222     .
223     far2sdk
224     src
225     src/base
226     src/mix
227     src/bookmarks
228     src/cfg
229     src/console
230     src/panels
231     src/filemask
232     src/hist
233     src/locale
234     src/macro
235     src/plug
236     src/vt
237     ${CMAKE_CURRENT_BINARY_DIR}
238     ${UCHARDET_INCLUDE_DIRS}
239     ../WinPort)
241 add_dependencies(far2l bootstrap WinPort)
243 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
244     SET (WINPORT -force_load WinPort wineguts utils)
245 else()
246     SET (WINPORT -Wl,--whole-archive WinPort -Wl,--no-whole-archive)
247 endif()
249 set_target_properties(far2l
250     PROPERTIES
251     ENABLE_EXPORTS TRUE)
253 if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
254     target_link_libraries(far2l
255     PRIVATE ${WINPORT}
256     PRIVATE c
257     PRIVATE ${UCHARDET_LIBRARIES})
258 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Haiku")
259     target_link_libraries(far2l
260         PRIVATE ${WINPORT}
261         PRIVATE gnu
262         PRIVATE ${UCHARDET_LIBRARIES})
263 else()
264     target_link_libraries(far2l
265     PRIVATE ${WINPORT}
266         PRIVATE dl
267         PRIVATE ${UCHARDET_LIBRARIES})
268 endif()
270 add_custom_command(TARGET far2l POST_BUILD
271     COMMAND ln -sf ${EXECUTABLE_NAME} ${INSTALL_DIR}/far2l_askpass
272     COMMAND ln -sf ${EXECUTABLE_NAME} ${INSTALL_DIR}/far2l_sudoapp
273     COMMAND ln -sf ${EXECUTABLE_NAME} ${INSTALL_DIR}/far2ledit)
275 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
276 #TODO
277 else()
278     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/DE/far2l.desktop" "${CMAKE_CURRENT_BINARY_DIR}/DE/far2l.desktop")
280     install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/DE/icons" DESTINATION "share" USE_SOURCE_PERMISSIONS COMPONENT desktop FILES_MATCHING PATTERN "*")
282         # Have to make desktop file executable, see:
283         # https://wiki.ubuntu.com/SecurityTeam/Policies#Execute-Permission_Bit_Required
284     install(FILES "${CMAKE_CURRENT_BINARY_DIR}/DE/far2l.desktop" DESTINATION "share/applications" COMPONENT desktop
285         PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE)
286 endif()