Threw in some tabs for better readabillity and added the forgotten CMakeLists.txt...
[amule.git] / src / CMakeLists.txt
blob4d1faa4a01f85f51c49c464d654ee27011f1dedf
1 set (LIBS_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs")
2 set (INCLUDE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
3 set (SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
4 set (EC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/libs/ec/cpp")
6 add_custom_command (
7         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pixmaps/flags_xpm/CountryFlags.h
8         COMMAND ${CMAKE_COMMAND} -DHEADER_FILE="${CMAKE_CURRENT_BINARY_DIR}/pixmaps/flags_xpm/CountryFlags.h" -P ${CMAKE_CURRENT_SOURCE_DIR}/pixmaps/flags_xpm/CMakeLists.txt
9         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/pixmaps/flags_xpm"
12 add_custom_command (
13         OUTPUT ${EC_INCLUDE_DIR}/ECCodes.h
14         COMMAND ${CMAKE_COMMAND} -DHEADER_FILE="${CMAKE_CURRENT_BINARY_DIR}/libs/ec/cpp/ECCodes.h" -P ${CMAKE_CURRENT_SOURCE_DIR}/libs/ec/abstracts/CMakeLists.txt
15         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libs/ec/abstracts"
18 add_custom_command (
19         OUTPUT ${EC_INCLUDE_DIR}/ECTagTypes.h
20         COMMAND ${CMAKE_COMMAND} -DHEADER_FILE="${CMAKE_CURRENT_BINARY_DIR}/libs/ec/cpp/ECTagTypes.h" -P ${CMAKE_CURRENT_SOURCE_DIR}/libs/ec/abstracts/CMakeLists.txt
21         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libs/ec/abstracts"
24 add_custom_target (generate_CountryFlags.h DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pixmaps/flags_xpm/CountryFlags.h)
25 add_custom_target (generate_ECCodes.h DEPENDS ${EC_INCLUDE_DIR}/ECCodes.h)
26 add_custom_target (generate_ECTagTypes.h DEPENDS ${EC_INCLUDE_DIR}/ECTagTypes.h)
27 set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR}/pixmaps/flags_xpm/CountryFlags.h PROPERTIES GENERATED TRUE)
28 set_source_files_properties (${EC_INCLUDE_DIR}/ECCodes.h PROPERTIES GENERATED TRUE)
29 set_source_files_properties (${EC_INCLUDE_DIR}/ECTagTypes.h PROPERTIES GENERATED TRUE)
30 include (${CMAKE_SOURCE_DIR}/cmake/source-vars.cmake)
32 if (BUILD_UTIL)
33         add_subdirectory (utils)
34 endif()
36 if (BUILD_WEBSERVER)
37         add_subdirectory (webserver)
38 endif()
40 if (INSTALL_SKINS)
41         add_subdirectory (skins)
42 endif()
45 if (ENABLE_IP2COUNTRY)
46         set_source_files_properties (${IP2COUNTRY}
47                 PROPERTIES COMPILE_FLAGS "-I${CMAKE_CURRENT_BINARY_DIR} -I${CMAKE_CURRENT_SOURCE_DIR}/pixmaps/flags_xpm"
48         )
49 endif()
51 if (NEED_LIB)
52         add_subdirectory (libs)
53 endif()
55 if (BUILD_AMULECMD)
56         add_executable (amulecmd
57                 DataToText.cpp
58                 ExternalConnector.cpp
59                 LoggerConsole.cpp
60                 NetworkFunctions.cpp
61                 OtherFunctions.cpp
62                 TextClient.cpp
63         )
65         if (WIN32)
66                 target_sources (amulecmd
67                         PRIVATE ${CMAKE_SOURCE_DIR}/version.rc
68                 )
69         endif()
71         target_compile_definitions (amulecmd
72                 PRIVATE wxUSE_GUI=0
73         )
75         target_include_directories (amulecmd
76                 PRIVATE ${SRC_DIR}
77         )
79         target_link_libraries (amulecmd
80                 mulecommon
81                 mulesocket
82                 ec
83         )
85         if (HAVE_BFD)
86                 target_link_libraries (amulecmd ${LIBBFD})
87         endif (HAVE_BFD)
89         if (HAVE_LIBREADLINE)
90                 target_link_libraries (amulecmd ${READLINE_LIBRARIES})
91         endif()
93         install (TARGETS amulecmd
94                 RUNTIME DESTINATION bin
95         )
96 endif (BUILD_AMULECMD)
98 if (BUILD_DAEMON)
99         add_executable (amuled
100                 ${CORE_SOURCES}
101                 ${COMMON_SOURCES}
102                 amuled.cpp
103         )
105         if (WIN32)
106                 target_sources (amuled
107                         PRIVATE ${CMAKE_SOURCE_DIR}/version.rc
108                 )
109         endif()
111         target_compile_definitions (amuled
112                 PRIVATE AMULE_DAEMON
113                 PRIVATE wxUSE_GUI=0
114         )
116         target_include_directories (amuled
117                 PRIVATE ${SRC_DIR}
118         )
120         target_link_libraries (amuled
121                 ec
122                 muleappcommon
123                 muleappcore
124                 mulecommon
125                 mulesocket
126                 wxWidgets::NET
127         )
129         if (HAVE_BFD)
130                 target_link_libraries (amuled
131                         ${LIBBFD}
132                 )
133         endif()
135         if (WIN32)
136                 target_link_libraries (amuled
137                         shlwapi.lib
138                 )
139         endif()
141         install (TARGETS amuled
142                 RUNTIME DESTINATION bin
143         )
144 endif()
146 if (BUILD_ED2K)
147         add_executable (ed2k
148                 ED2KLinkParser.cpp
149                 MagnetURI.cpp
150                 MuleCollection.cpp
151         )
153         if (WIN32)
154                 target_sources (ed2k
155                         PRIVATE ${CMAKE_SOURCE_DIR}/version.rc
156                 )
157         endif()
159         target_compile_definitions (ed2k
160                 PRIVATE "USE_STD_STRING"
161         )
163         if (WIN32)
164                 target_link_libraries (ed2k
165                         shlwapi.lib
166                 )
167         endif()
169         install (TARGETS ed2k
170                 RUNTIME DESTINATION bin
171         )
172 endif()
174 if (BUILD_MONOLITHIC)
175         add_executable (amule
176                 ${COMMON_SOURCES}
177                 ${CORE_SOURCES}
178                 ${GUI_SOURCES}
179                 CaptchaDialog.cpp
180                 CaptchaGenerator.cpp
181                 PartFileConvert.cpp
182                 PartFileConvertDlg.cpp
183         )
185         if (WIN32)
186                 target_sources (amule
187                         PRIVATE ${CMAKE_SOURCE_DIR}/version.rc
188                 )
189         endif()
191         target_link_libraries (amule
192                 ec
193                 muleappcommon
194                 muleappcore
195                 muleappgui
196                 mulecommon
197                 mulesocket
198                 $<$<VERSION_LESS:${wxWidgets_VERSION_STRING},3.1.2>:wxWidgets::ADV>
199                 wxWidgets::NET
200         )
202         if (HAVE_BFD)
203                 target_link_libraries (amule ${LIBBFD})
204         endif()
206         if (WIN32)
207                 target_link_libraries (amule
208                         shlwapi.lib
209                 )
211                 set_target_properties (amule
212                         PROPERTIES WIN32_EXECUTABLE TRUE
213                 )
214         endif()
216         install (TARGETS amule
217                 RUNTIME DESTINATION bin
218         )
219 endif (BUILD_MONOLITHIC)
221 if (BUILD_REMOTEGUI)
222         add_executable (amulegui
223                 ${COMMON_SOURCES}
224                 ${GUI_SOURCES}
225                 kademlia/utils/UInt128.cpp
226                 amule-remote-gui.cpp
227         )
229         if (WIN32)
230                 target_sources (amulegui
231                         PRIVATE ${CMAKE_SOURCE_DIR}/version.rc
232                 )
233         endif()
235         target_compile_definitions (amulegui
236                 PRIVATE "CLIENT_GUI"
237         )
239         target_include_directories (amulegui
240                 PRIVATE ${SRC_DIR}
241         )
243         target_link_libraries (amulegui
244                 ec
245                 muleappcommon
246                 muleappgui
247                 mulecommon
248                 mulesocket
249                 $<$<VERSION_LESS:${wxWidgets_VERSION_STRING},3.1.2>:wxWidgets::ADV>
250                 wxWidgets::NET
251         )
253         if (ENABLE_IP2COUNTRY)
254                 target_compile_definitions (amulegui
255                         PRIVATE ENABLE_IP2COUNTRY
256                 )
258         target_link_directories (amulegui
259                 ${LIBGEOIP}
260         )
261         endif()
263         if (HAVE_BFD)
264                 target_link_libraries (amulegui
265                         ${LIBBFD}
266                 )
267         endif()
269         if (WIN32)
270                 set_target_properties (amulegui
271                         PROPERTIES WIN32_EXECUTABLE TRUE
272                 )
273         endif()
275         install (TARGETS amulegui
276                 RUNTIME DESTINATION bin
277         )
278 endif()
280 if (NEED_LIB_MULEAPPCOMMON)
281         add_library (muleappcommon STATIC
282                 ${UPNP_SOURCES}
283                 CFile.cpp
284                 ClientCredits.cpp
285                 DataToText.cpp
286                 ED2KLink.cpp
287                 Friend.cpp
288                 GapList.cpp
289                 MagnetURI.cpp
290                 MemFile.cpp
291                 NetworkFunctions.cpp
292                 OtherFunctions.cpp
293                 Packet.cpp
294                 RLE.cpp
295                 SafeFile.cpp
296                 SHA.cpp
297                 Tag.cpp
298                 TerminationProcess.cpp
299                 Timer.cpp
300         )
302         target_compile_definitions (muleappcommon
303                 PRIVATE wxUSE_GUI=0
304                 PRIVATE WXUSINGDLL
305         )
307         target_include_directories (muleappcommon
308                 PUBLIC ${amule_BINARY_DIR}
309                 PUBLIC ${EC_INCLUDE_DIR}
310                 PRIVATE ${INCLUDE_INCLUDE_DIR}
311                 PRIVATE ${LIBS_INCLUDE_DIR}
312                 PRIVATE ${wxWidgets_INCLUDE_DIRS}
313                 PRIVATE ${ZLIB_INCLUDE_DIR}
314         )
316         add_dependencies (muleappcommon
317                 generate_ECCodes.h
318                 generate_ECTagTypes.h
319         )
321         if (ENABLE_UPNP)
322                 target_link_libraries (muleappcommon
323                         PUBLIC UPNP::Shared
324                 )
325         endif()
326 endif()
328 if (NEED_LIB_MULEAPPCORE)
329         if (BISON_FOUND)
330                 bison_target (Parser.cpp
331                         ${CMAKE_CURRENT_SOURCE_DIR}/Parser.y
332                         ${CMAKE_CURRENT_BINARY_DIR}/Parser.cpp
333                         COMPILE_FLAGS "-t -d -v"
334                 )
336                 set (PARSER ${CMAKE_CURRENT_BINARY_DIR}/Parser.cpp)
337         else()
338                 set (PARSER ${CMAKE_CURRENT_SOURCE_DIR}/Parser.cpp)
339         endif (BISON_FOUND)
341         if (FLEX_FOUND)
342                 if (FLEX_MATCH)
343                         set (FLEX_FLAGS "--header-file=${CMAKE_CURRENT_BINARY_DIR}/Scanner.h")
345                         set_source_files_properties (Parser.cpp
346                                 COMPILE_FLAGS "-I${CMAKE_CURRENT_BINARY_DIR}"
347                         )
348                 endif()
350                 flex_target (Scanner.cpp
351                         ${CMAKE_CURRENT_SOURCE_DIR}/Scanner.l
352                         ${CMAKE_CURRENT_BINARY_DIR}/Scanner.cpp
353                         COMPILE_FLAGS "${FLEX_FLAGS}"
354                 )
356                 flex_target (IPFilterScanner.cpp
357                         ${CMAKE_CURRENT_SOURCE_DIR}/IPFilterScanner.l
358                         ${CMAKE_CURRENT_BINARY_DIR}/IPFilterScanner.cpp
359                         COMPILE_FLAGS "-Pyyip"
360                 )
362                 set (SCANNER ${CMAKE_CURRENT_BINARY_DIR}/Scanner.cpp)
363                 set (IPFILTERSCANNER ${CMAKE_CURRENT_BINARY_DIR}/IPFilterScanner.cpp)
364         else()
365                 set (SCANNER ${CMAKE_CURRENT_SOURCE_DIR}/Scanner.cpp)
366                 set (IPFILTERSCANNER ${CMAKE_CURRENT_SOURCE_DIR}/IPFilterScanner.cpp)
367         endif()
369         add_library (muleappcore STATIC
370                 ${IPFILTERSCANNER}
371                 ${PARSER}
372                 ${SCANNER}
373                 kademlia/kademlia/Entry.cpp
374                 kademlia/kademlia/Indexed.cpp
375                 kademlia/kademlia/SearchManager.cpp
376                 kademlia/routing/RoutingBin.cpp
377                 kademlia/utils/UInt128.cpp
378                 AsyncDNS.cpp
379                 CanceledFileList.cpp
380                 DeadSourceList.cpp
381                 FileArea.cpp
382                 FileAutoClose.cpp
383                 PlatformSpecific.cpp
384                 RandomFunctions.cpp
385                 RC4Encrypt.cpp
386                 StateMachine.cpp
387                 TerminationProcessAmuleweb.cpp
388                 ThreadScheduler.cpp
389                 UPnPBase.cpp
390         )
392         target_compile_definitions (muleappcore
393                 PRIVATE wxUSE_GUI=0
394                 PRIVATE WXUSINGDLL
395         )
397         target_include_directories (muleappcore
398                 PRIVATE ${CMAKE_BINARY_DIR}
399                 PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
400                 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
401                 PRIVATE ${INCLUDE_INCLUDE_DIR}
402                 PRIVATE ${LIBS_INCLUDE_DIR}
403                 PRIVATE ${wxWidgets_INCLUDE_DIRS}
404         )
406         if (ENABLE_UPNP)
407                 target_include_directories (muleappcore
408                         PRIVATE $<TARGET_PROPERTY:UPNP::Shared,INTERFACE_INCLUDE_DIRECTORIES>
409                 )
410         endif()
412         target_link_libraries (muleappcore
413                 CRYPTOPP::CRYPTOPP
414         )
415 endif()
417 if (NEED_LIB_MULEAPPGUI)
418         add_library (muleappgui STATIC
419                 ${IP2COUNTRY}
420                 extern/wxWidgets/listctrl.cpp
421                 BarShader.cpp
422                 ColorFrameCtrl.cpp
423                 EditServerListDlg.cpp
424                 FileDetailListCtrl.cpp
425                 MuleCollection.cpp
426                 MuleColour.cpp
427                 MuleGifCtrl.cpp
428                 MuleListCtrl.cpp
429                 MuleNotebook.cpp
430                 MuleTextCtrl.cpp
431                 muuli_wdr.cpp
432         )
434         if (IP2COUNTRY AND GEOIP_INCLUDE_DIR)
435                 target_include_directories (muleappgui
436                         PRIVATE ${GEOIP_INCLUDE_DIR}
437                 )
438         endif()
440         target_compile_definitions (muleappgui
441                 PRIVATE WXUSINGDLL
442         )
444         target_include_directories (muleappgui
445                 PRIVATE ${amule_BINARY_DIR}
446                 PRIVATE ${INCLUDE_INCLUDE_DIR}
447                 PRIVATE ${LIBS_INCLUDE_DIR}
448         )
450         target_link_libraries (muleappgui
451                 wxWidgets::CORE
452         )
454         if (ENABLE_IP2COUNTRY)
455                 add_dependencies (muleappgui
456                         generate_CountryFlags.h)
457         endif()
458 endif()
460 IF (NEED_LIB_MULESOCKET)
461         add_library (mulesocket STATIC
462                 LibSocket.cpp
463         )
465         target_compile_definitions (mulesocket
466                 PRIVATE wxUSE_GUI=0
467         )
468         
469         target_include_directories (mulesocket
470                 PRIVATE ${amule_BINARY_DIR}
471                 PUBLIC ${INCLUDE_INCLUDE_DIR}
472                 PUBLIC ${LIBS_INCLUDE_DIR}
473         )
475         if (ENABLE_BOOST)
476                 target_include_directories (mulesocket
477                         PRIVATE ${Boost_INCLUDE_DIR}
478                         PRIVATE ${wxWidgets_INCLUDE_DIRS}
479                 )
481                 target_link_libraries (mulesocket
482                         ${Boost_LIBRARIES}
483                         wxWidgets::BASE
484                 )
485         else()
486                 target_link_libraries (mulesocket
487                         wxWidgets::NET
488                 )
489         endif()
490 endif()