summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/td/generate/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tdlib/td/td/generate/CMakeLists.txt')
-rw-r--r--protocols/Telegram/tdlib/td/td/generate/CMakeLists.txt121
1 files changed, 79 insertions, 42 deletions
diff --git a/protocols/Telegram/tdlib/td/td/generate/CMakeLists.txt b/protocols/Telegram/tdlib/td/td/generate/CMakeLists.txt
index 0b07d61604..e7f6aea067 100644
--- a/protocols/Telegram/tdlib/td/td/generate/CMakeLists.txt
+++ b/protocols/Telegram/tdlib/td/td/generate/CMakeLists.txt
@@ -1,45 +1,55 @@
-cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
+if ((CMAKE_MAJOR_VERSION LESS 3) OR (CMAKE_VERSION VERSION_LESS "3.0.2"))
+ message(FATAL_ERROR "CMake >= 3.0.2 is required")
+endif()
+
+if (NOT DEFINED CMAKE_INSTALL_BINDIR)
+ set(CMAKE_INSTALL_BINDIR "bin")
+endif()
file(MAKE_DIRECTORY auto/td/telegram)
file(MAKE_DIRECTORY auto/td/mtproto)
-
-set(TL_TD_AUTO_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/auto PARENT_SCOPE)
-
-set(TL_TD_AUTO
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/mtproto/mtproto_api.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/mtproto/mtproto_api.h
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/mtproto/mtproto_api.hpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_api.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_api.h
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_api.hpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/telegram_api.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/telegram_api.h
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/telegram_api.hpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/secret_api.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/secret_api.h
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/secret_api.hpp
+file(MAKE_DIRECTORY auto/tlo)
+
+set(TL_TD_AUTO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/auto PARENT_SCOPE)
+
+set(TD_AUTO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/auto/td)
+
+set(TL_TD_AUTO_SOURCE
+ ${TD_AUTO_INCLUDE_DIR}/mtproto/mtproto_api.cpp
+ ${TD_AUTO_INCLUDE_DIR}/mtproto/mtproto_api.h
+ ${TD_AUTO_INCLUDE_DIR}/mtproto/mtproto_api.hpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/telegram_api.cpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/telegram_api.h
+ ${TD_AUTO_INCLUDE_DIR}/telegram/telegram_api.hpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/secret_api.cpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/secret_api.h
+ ${TD_AUTO_INCLUDE_DIR}/telegram/secret_api.hpp
PARENT_SCOPE
)
-set(TL_TD_JSON_AUTO
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_api_json.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_api_json.h
+set(TL_TD_API_AUTO_SOURCE
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_api.cpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_api.h
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_api.hpp
PARENT_SCOPE
)
-set(TL_TD_API_TLO ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tlo)
-set(TL_TD_API_TLO ${TL_TD_API_TLO} PARENT_SCOPE)
+set(TL_TD_JSON_AUTO_SOURCE
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_api_json.cpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_api_json.h
+ PARENT_SCOPE
+)
-set(TL_C_AUTO
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_tdc_api.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_tdc_api.h
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/td_tdc_api_inner.h
+set(TL_C_AUTO_SOURCE
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_tdc_api.cpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_tdc_api.h
+ ${TD_AUTO_INCLUDE_DIR}/telegram/td_tdc_api_inner.h
PARENT_SCOPE
)
-set(TL_DOTNET_AUTO
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/TdDotNetApi.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/auto/td/telegram/TdDotNetApi.h
+set(TL_DOTNET_AUTO_SOURCE
+ ${TD_AUTO_INCLUDE_DIR}/telegram/TdDotNetApi.cpp
+ ${TD_AUTO_INCLUDE_DIR}/telegram/TdDotNetApi.h
PARENT_SCOPE
)
@@ -86,19 +96,46 @@ set(TL_GENERATE_JSON_SOURCE
if (NOT CMAKE_CROSSCOMPILING)
find_program(PHP_EXECUTABLE php)
+ if ((CMAKE_SYSTEM_NAME MATCHES "FreeBSD") AND (CMAKE_SYSTEM_VERSION MATCHES "HBSD"))
+ set(PHP_EXECUTABLE "PHP_EXECUTABLE-NOTFOUND")
+ endif()
+
if (PHP_EXECUTABLE AND NOT TD_ENABLE_DOTNET)
set(GENERATE_COMMON_CMD generate_common && ${PHP_EXECUTABLE} DoxygenTlDocumentationGenerator.php scheme/td_api.tl auto/td/telegram/td_api.h)
else()
set(GENERATE_COMMON_CMD generate_common)
endif()
+ add_subdirectory(tl-parser)
+
+ set(TLO_AUTO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/auto/tlo)
+ set(TLO_FILES ${TLO_AUTO_INCLUDE_DIR}/mtproto_api.tlo ${TLO_AUTO_INCLUDE_DIR}/secret_api.tlo ${TLO_AUTO_INCLUDE_DIR}/td_api.tlo ${TLO_AUTO_INCLUDE_DIR}/telegram_api.tlo)
+ set(TD_API_TLO_FILE ${TLO_AUTO_INCLUDE_DIR}/td_api.tlo)
+
+ # Ninja generator uses relative paths and can't correctly handle these dependencies
+ # See https://gitlab.kitware.com/cmake/cmake/-/issues/13894
+ if (CMAKE_GENERATOR STREQUAL "Ninja")
+ set(TLO_FILES)
+ set(TD_API_TLO_FILE)
+ endif()
+
+ add_custom_target(tl_generate_tlo
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND tl-parser -e auto/tlo/mtproto_api.tlo scheme/mtproto_api.tl
+ COMMAND tl-parser -e auto/tlo/secret_api.tlo scheme/secret_api.tl
+ COMMAND tl-parser -e auto/tlo/td_api.tlo scheme/td_api.tl
+ COMMAND tl-parser -e auto/tlo/telegram_api.tlo scheme/telegram_api.tl
+ COMMENT "Generate TLO files"
+ DEPENDS tl-parser ${CMAKE_CURRENT_SOURCE_DIR}/scheme/mtproto_api.tl ${CMAKE_CURRENT_SOURCE_DIR}/scheme/secret_api.tl ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tl ${CMAKE_CURRENT_SOURCE_DIR}/scheme/telegram_api.tl
+ )
+
add_executable(generate_common ${TL_GENERATE_COMMON_SOURCE})
target_link_libraries(generate_common PRIVATE tdtl)
add_custom_target(tl_generate_common
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${GENERATE_COMMON_CMD}
- COMMENT "Generate common tl source files"
- DEPENDS generate_common scheme/mtproto_api.tlo scheme/telegram_api.tlo scheme/secret_api.tlo ${TL_TD_API_TLO} DoxygenTlDocumentationGenerator.php
+ COMMENT "Generate common TL source files"
+ DEPENDS generate_common tl_generate_tlo ${TLO_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tl ${CMAKE_CURRENT_SOURCE_DIR}/DoxygenTlDocumentationGenerator.php
)
if (TD_ENABLE_JNI)
target_compile_definitions(generate_common PRIVATE TD_ENABLE_JNI=1)
@@ -112,8 +149,8 @@ if (NOT CMAKE_CROSSCOMPILING)
add_custom_target(tl_generate_c
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND generate_c
- COMMENT "Generate C tl source files"
- DEPENDS generate_c ${TL_TD_API_TLO}
+ COMMENT "Generate C TL source files"
+ DEPENDS generate_c tl_generate_tlo ${TD_API_TLO_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tl
)
add_executable(td_generate_java_api ${TL_GENERATE_JAVA_SOURCE})
@@ -124,30 +161,30 @@ if (NOT CMAKE_CROSSCOMPILING)
add_custom_target(tl_generate_json
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND generate_json
- COMMENT "Generate JSON tl source files"
- DEPENDS generate_json ${TL_TD_API_TLO}
+ COMMENT "Generate JSON TL source files"
+ DEPENDS generate_json tl_generate_tlo ${TD_API_TLO_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tl
)
if (TD_ENABLE_JNI)
- install(TARGETS td_generate_java_api RUNTIME DESTINATION bin)
- install(FILES JavadocTlDocumentationGenerator.php TlDocumentationGenerator.php DESTINATION bin/td/generate)
- install(FILES scheme/td_api.tlo scheme/td_api.tl DESTINATION bin/td/generate/scheme)
+ install(TARGETS td_generate_java_api RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+ install(FILES JavadocTlDocumentationGenerator.php TlDocumentationGenerator.php DESTINATION "${CMAKE_INSTALL_BINDIR}/td/generate")
+ install(FILES ${TLO_AUTO_INCLUDE_DIR}/td_api.tlo scheme/td_api.tl DESTINATION "${CMAKE_INSTALL_BINDIR}/td/generate/scheme")
endif()
if (TD_ENABLE_DOTNET)
if (PHP_EXECUTABLE)
- set(GENERATE_DOTNET_API_CMD td_generate_dotnet_api ${TL_TD_API_TLO} && ${PHP_EXECUTABLE} DotnetTlDocumentationGenerator.php scheme/td_api.tl auto/td/telegram/TdDotNetApi.h)
+ set(GENERATE_DOTNET_API_CMD td_generate_dotnet_api ${TD_API_TLO_FILE} && ${PHP_EXECUTABLE} DotnetTlDocumentationGenerator.php scheme/td_api.tl auto/td/telegram/TdDotNetApi.h)
else()
- set(GENERATE_DOTNET_API_CMD td_generate_dotnet_api ${TL_TD_API_TLO})
+ set(GENERATE_DOTNET_API_CMD td_generate_dotnet_api ${TD_API_TLO_FILE})
endif()
add_executable(td_generate_dotnet_api generate_dotnet.cpp tl_writer_dotnet.h)
target_link_libraries(td_generate_dotnet_api PRIVATE tdtl)
add_custom_target(generate_dotnet_api
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND ${GENERATE_DOTNET_API_CMD} ${TL_TD_API_TLO}
+ COMMAND ${GENERATE_DOTNET_API_CMD}
COMMENT "Generate .NET API files"
- DEPENDS td_generate_dotnet_api ${TL_TD_API_TLO} DotnetTlDocumentationGenerator.php
+ DEPENDS td_generate_dotnet_api tl_generate_tlo ${TD_API_TLO_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tl ${CMAKE_CURRENT_SOURCE_DIR}/DotnetTlDocumentationGenerator.php
)
endif()