Commit 101b8fca authored by Victor Yacovlev's avatar Victor Yacovlev
parents 5fa992fa 6468f172
# TODO Travis CI now supports only Ubuntu 12.04 and 14.04,
# which are TOO old for us. Wait for 'xenial' support or
# install Qt >= 5.3 and CMake >= 3.0 from some PPA
language: cpp
compiler: gcc
dist: xenial
addons:
apt:
packages:
- python3-all
- qt5-default
script:
- cmake -DUSE_QT=5
- make
Build manual for openSUSE 13.1
---------------------------------
1. Required additional packages to install before build:
- cmake
- gcc-c++
- libqt4-devel
- libqca2-devel
- libQtWebKit-devel
- boost-devel
- zlib-devel
- llvm-devel
- llvm-clang
- python3-devel
2. Build and install commands
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../
sudo make install # installs to /usr/local, requires root password
Build manual for Ubuntu 14.04 LTS
---------------------------------
1. Required additional packages to install before build:
- cmake
- g++
- libqt4-dev
- libqca2-dev
- zlib1g-dev
- libboost-dev
- llvm-dev
- clang
- python3.2-dev (or higher)
2. Build and install commands
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../
sudo make install # installs to /usr/local, requires root password
......@@ -27,7 +27,7 @@ foreach(res IN ITEMS ${resfiles})
endif()
endforeach(res)
# TODO move the code to function and reuse it
# Courses in dist TODO move the code to function and reuse it
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_RESOURCES_DIR}/courses")
file(GLOB_RECURSE resfiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/courses ${CMAKE_CURRENT_SOURCE_DIR}/courses/*)
foreach(res IN ITEMS ${resfiles})
......@@ -39,7 +39,42 @@ foreach(res IN ITEMS ${resfiles})
endif()
endforeach(res)
# In-App icons TODO move the code to function and reuse it
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_RESOURCES_DIR}/icons")
file(GLOB_RECURSE icons RELATIVE ${CMAKE_SOURCE_DIR}/share/kumir2/icons ${CMAKE_SOURCE_DIR}/share/kumir2/icons/*)
foreach(icon IN ITEMS ${icons})
get_filename_component(subdir ${icon} PATH)
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_RESOURCES_DIR}/icons/${subdir}")
file(COPY "${CMAKE_SOURCE_DIR}/share/kumir2/icons/${icon}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_RESOURCES_DIR}/icons/${subdir}")
install(FILES "${CMAKE_SOURCE_DIR}/${KUMIR2_RESOURCES_DIR}/icons/${icon}" DESTINATION "${KUMIR2_RESOURCES_DIR}/icons/${subdir}")
endforeach(icon)
# Development files
install(DIRECTORY include/ DESTINATION include/ FILES_MATCHING PATTERN "*.h*")
install(DIRECTORY src/kumir2-libs/ DESTINATION include/kumir2-libs/ FILES_MATCHING PATTERN "*.h*")
install(DIRECTORY src/kumir2-libs/ DESTINATION include/kumir2-libs/ FILES_MATCHING PATTERN "*.table")
install(
FILES scripts/gen_actor_source.py
DESTINATION ${KUMIR2_SDK_SCRIPTS_DIR}
PERMISSIONS
OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ
WORLD_EXECUTE WORLD_READ
)
install(DIRECTORY cmake/ DESTINATION "${KUMIR2_SDK_CMAKE_DIR}")
# Generate and install CMake file describing current build configuration
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/distribution_build_config.cmake" "# Installed build configuration\n")
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/distribution_build_config.cmake"
"set(USE_QT ${USE_QT})\nset(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE})\nset(KUMIR2_ROOT ${CMAKE_INSTALL_PREFIX})\n"
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/distribution_build_config.cmake"
DESTINATION "${KUMIR2_SDK_CMAKE_DIR}/kumir2"
)
# Platform-specific global resources handling
if(WIN32)
# Do nothing
elseif(APPLE)
......@@ -56,14 +91,5 @@ else()
file(COPY "${CMAKE_SOURCE_DIR}/app_icons/linux/${icon}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_XDG_ICONS_DIR}/${subdir}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_XDG_ICONS_DIR}/${icon}" DESTINATION "${KUMIR2_XDG_ICONS_DIR}/${subdir}")
endforeach(icon)
# In-app icons
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_RESOURCES_DIR}/icons")
file(GLOB_RECURSE icons RELATIVE ${CMAKE_SOURCE_DIR}/share/kumir2/icons ${CMAKE_SOURCE_DIR}/share/kumir2/icons/*)
foreach(icon IN ITEMS ${icons})
get_filename_component(subdir ${icon} PATH)
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_RESOURCES_DIR}/icons/${subdir}")
file(COPY "${CMAKE_SOURCE_DIR}/share/kumir2/icons/${icon}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_RESOURCES_DIR}/icons/${subdir}")
install(FILES "${CMAKE_SOURCE_DIR}/${KUMIR2_RESOURCES_DIR}/icons/${icon}" DESTINATION "${KUMIR2_RESOURCES_DIR}/icons/${subdir}")
endforeach(icon)
endif()
# Информация для мэйнтейнеров пакета в Linux-дистрибутивах
## Пререквизиты
- Современный дистрибутив с актуальной версией компилятора (минимум gcc 4.8)
- На выбор: Qt>= 4.8 или >= 5.3
- Python >= 3.2
- CMake >= 3.0
## Рекомендации по именованию версий и структуре пакетов
### Стабильные версии и текущая версия
Стабильные версии - это только те, для которых в VCS git предусмотрены теги, например, `2.1.0-rc7`.
Если склонировать из этого репозитория, то во время сборки этот номер версии будет отображаться в "Инфо->О программе".
Текущая версия - в ветке `master`. Стабильность никто не гарантирует.
Более того, никто не гарантирует, что будет что-то работать, если смешивать часть компонент из стабильной и текущей версий.
Во избежание этого, лучше делать два разных пакета, например 'kumir2' и 'kumir2-unstable' у которых в зависимостях явно
прописано, что они не могут быть установлены одновременно.
### Пакет для разработчиков
У нас теперь появилась возможность сборки сторонних плагинов, не используя дерево исходных текстов Кумир.
Следующие файлы и каталоги нужно вынести в пакет `-devel`:
- `/usr/include/kumir2`
- `/usr/include/kumir2-libs`
- `/usr/lib64/kumir2/gen_actor_source.py`
- `/usr/lib64/cmake/Kumir2`
### Пакеты сторонних разработчиков
Все, что находится вне этого репозитория - не наше, и мы знать не знаем, что это такое.
Поэтому все сторонние плагины к Кумир-2 нужно упаковывать в отдельные пакеты, и называть их как-нибудь, чтобы это было понятно, что
является сторонним продуктом, например, с префиксом или суффиксом `addon`.
## Какую версию Qt использовать?
В настоящее время [пока ещё] рекомендуется использовать Qt4, так как GUI лучше протестировано на реальных пользователях.
Но в какой-то момент мы откажемся от поддержки Qt4 в пользу Qt5.
## Порядок сборки
С Qt4:
```
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
sudo make install
```
С Qt5:
```
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DUSE_QT=5 ..
make
sudo make install
```
Внимание! Перед упаковкой поставки, обязательно убедитесь, что install root (в данном случае - /usr) совпадает со значением
переменной `KUMIR2_ROOT` в файле `/usr/lib64/cmake/Kumir2/distribution_build_config.cmake`. При необходимости - измените только этот файл.
В противном случае, `-devel` не будет работать.
Kumir 2.x programming system
============================
***NOTE*** Maintainers from AltLinux please read this: [MAINTAINERS_ru.md](MAINTAINERS_ru.md) (in Russian).
Branches and tags
-----------------
......
## Установка и удаление системы КуМир 2.1.0 на Ubuntu.
### Установка системы
Ниже описана подробная инструкция по установке КуМир 2.1.0 на Ubuntu версии 14.04 или больше.
1. Запустить Терминал с помощью комбинации клавиш:
<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>T</kbd>. Все последующие команды вводятся в терминале.
2. Добавить репозиторий системы в индекс пакетов АРТ:
```
sudo add-apt-repository "deb http://repos.lpm.org.ru/kumir2/ubuntu trusty universe"
```
3. Обновить локальный индекс пакетов:
```
sudo apt-get update
```
4. Установить нужную конфигурацию системы КуМир.
* Стандартная: ```sudo apt-get install kumir2-classic```
* Для старшекласников: ```sudo apt-get install kumir2-highgrade```
* Для учителей: ```sudo apt-get install kumir2-teacher```
* Профессиональная версия: ```sudo apt-get install kumir2-ide```
* ВСЕ версии ```sudo apt-get install kumir2```
Сама установка требует участия пользователя дважды:
1. При появлении такого сообщения:
```
После данной операции, объём занятого дискового пространства возрастёт на ... MB.
Хотите продолжить? [Д/н]
```
необходимо нажать <kbd>Enter</kbd> либо набрать <kbd>д</kbd>.
2. При появлении предупреждения цифровой подписи:
```
ВНИМАНИЕ: Следующие пакеты невозможно аутентифицировать!
...
Установить эти пакеты без проверки? [y/N]
```
необходимо набрать <kbd>y</kbd> (на английской раскладке).
### Удаление системы
Удаление системы проводится с помощью всего одной команды, введённой в терминале (см. *п.1 инструкции по установке*):
```
sudo apt-get autoremove <НАЗВАНИЕ_ПАКЕТА>
```
Вместо ```НАЗВАНИЕ_ПАКЕТА``` нужно поставить название пакета, установленного в *п.4 инструкции по установке*. Например:
```
sudo apt-get autoremove kumir2-ide
```
В процессе удаления появится сообщение, аналогичное сообщению *п.4.1. инструкции по установке*, только вместо слова
```возрастёт``` будет написано ```уменьшится```. Действия в этом случае также аналогичны *п.4.1*.
**Предупреждение:** На более старых версиях Ubuntu система может не работать.
......@@ -15,10 +15,12 @@ set(CMAKE_INSTALL_RPATH "")
set(CMAKE_INSTALL_RPATH "${Qt5_DIR}/../../")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'${Qt5_DIR}/../../'")
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif()
if("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif()
set(KUMIR2_SDK_SCRIPTS_DIR "${KUMIR2_RESOURCES_DIR}/devel")
set(KUMIR2_SDK_CMAKE_DIR "${KUMIR2_RESOURCES_DIR}/devel/cmake")
# Compile flags
set(KUMIR2_CXXFLAGS "-fno-exceptions -std=c++0x -fPIC -DAPPLE")
......
......@@ -107,6 +107,9 @@ function(kumir2_qt_moc INFILE FILE_LOCATION)
foreach(def ${DEF_LIST})
file(APPEND ${PARAMS_FILE_NAME} "-D${def}\n")
endforeach()
if(APPLE AND ${USE_QT} GREATER 4)
file(APPEND ${PARAMS_FILE_NAME} "-F${Qt5_DIR}/../../\n")
endif()
file(APPEND ${PARAMS_FILE_NAME} "-o\n")
file(APPEND ${PARAMS_FILE_NAME} "${OF}\n")
file(APPEND ${PARAMS_FILE_NAME} "${FILE_LOCATION}/${INFILE}\n")
......@@ -217,14 +220,7 @@ function(kumir2_add_plugin)
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${KUMIR2_PLUGINS_DIR}")
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${KUMIR2_PLUGINS_DIR}")
kumir2_handle_translation(${PARSED_ARGS_NAME} "ru")
kumir2_copy_resources(${PARSED_ARGS_NAME})
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.pluginspec")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.pluginspec" DESTINATION "${CMAKE_BINARY_DIR}/${KUMIR2_PLUGINS_DIR}")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.pluginspec" DESTINATION ${KUMIR2_PLUGINS_DIR})
elseif(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${PARSED_ARGS_NAME}.pluginspec")
file(COPY "${CMAKE_CURRENT_BINARY_DIR}/${PARSED_ARGS_NAME}.pluginspec" DESTINATION "${CMAKE_BINARY_DIR}/${KUMIR2_PLUGINS_DIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PARSED_ARGS_NAME}.pluginspec" DESTINATION ${KUMIR2_PLUGINS_DIR})
endif()
kumir2_copy_resources(${PARSED_ARGS_NAME})
install(TARGETS ${PARSED_ARGS_NAME} DESTINATION ${KUMIR2_PLUGINS_DIR})
endfunction(kumir2_add_plugin)
......@@ -233,7 +229,6 @@ function(kumir2_add_actor)
string(TOLOWER "${PARSED_ARGS_NAME}.json" JSON_FILE_NAME)
string(TOLOWER "${PARSED_ARGS_NAME}modulebase" MODULEBASE)
string(TOLOWER "${PARSED_ARGS_NAME}plugin" PLUGIN)
set(PLUGIN_SPEC "Actor${PARSED_ARGS_NAME}.pluginspec")
set(PLUGIN_NAME "Actor${PARSED_ARGS_NAME}")
if(EXISTS "${CMAKE_SOURCE_DIR}/scripts/gen_actor_source.py")
set(GEN_ACTOR_SOURCE_SCRIPT "${CMAKE_SOURCE_DIR}/scripts/gen_actor_source.py")
......@@ -252,7 +247,6 @@ function(kumir2_add_actor)
OUTPUT
${SOURCES_GENERATED}
${HEADERS_GENERATED}
${PLUGIN_SPEC}
COMMAND ${PYTHON_EXECUTABLE}
${GEN_ACTOR_SOURCE_SCRIPT}
"--update"
......@@ -284,10 +278,7 @@ endfunction(kumir2_add_actor)
function(kumir2_add_launcher)
cmake_parse_arguments(PARSED_ARGS "" "NAME;SPLASHSCREEN;CONFIGURATION" "" ${ARGN})
set(LAUNCHER_SOURCES "${CMAKE_SOURCE_DIR}/src/app/main.cpp")
if(NOT ${USE_QT} GREATER 4)
include_directories("${QT_INCLUDE_DIR}")
include_directories("${QT_INCLUDE_DIR}/Qt")
endif()
kumir2_use_qt(Core Gui)
if(WIN32 AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.rc")
list(APPEND LAUNCHER_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.rc")
add_executable(${PARSED_ARGS_NAME} WIN32 ${LAUNCHER_SOURCES})
......@@ -322,17 +313,14 @@ endfunction(kumir2_add_launcher)
function(kumir2_add_tool)
cmake_parse_arguments(PARSED_ARGS "" "NAME" "SOURCES;LIBRARIES;CXXFLAGS" ${ARGN})
if(NOT ${USE_QT} GREATER 4)
include_directories("${QT_INCLUDE_DIR}")
include_directories("${QT_INCLUDE_DIR}/Qt")
endif()
kumir2_use_qt(Core Gui)
if(WIN32 AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.rc")
list(APPEND PARSED_ARGS_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.rc")
add_executable(${PARSED_ARGS_NAME} WIN32 ${PARSED_ARGS_SOURCES})
if(${USE_QT} GREATER 4)
list(APPEND PARSED_ARGS_LIBRARIES ${Qt5Core_QTMAIN_LIBRARIES})
else()
list(APPEND QT_LIBRARIES ${QT_QTMAIN_LIBRARY})
list(APPEND PARSED_ARGS_LIBRARIES ${QT_QTMAIN_LIBRARY})
endif()
else()
add_executable(${PARSED_ARGS_NAME} ${PARSED_ARGS_SOURCES})
......
......@@ -29,6 +29,10 @@ if(NOT DEFINED KUMIR2_SDK_SCRIPTS_DIR)
set(KUMIR2_SDK_SCRIPTS_DIR ${KUMIR2_LIBS_DIR}) # devel scripts
endif(NOT DEFINED KUMIR2_SDK_SCRIPTS_DIR)
if(NOT DEFINED KUMIR2_SDK_CMAKE_DIR)
set(KUMIR2_SDK_CMAKE_DIR "${LIB_BASENAME}/cmake/Kumir2") # cmake files to use from others
endif(NOT DEFINED KUMIR2_SDK_CMAKE_DIR)
# clear default CMake RPATH values
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
......@@ -41,10 +45,17 @@ set(KUMIR2_CXXFLAGS_Release "-O2 -DNDEBUG -DQT_NO_DEBUG")
set(KUMIR2_CXXFLAGS_Debug "-g -O0 -Werror -Wreorder -Wreturn-type -Wno-error=unused-variable -Wno-error=unused-parameter")
# Linkage flags
set(KUMIR2_LIBRARY_LINKER_FLAGS "-Wl,--no-undefined -Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN'")
set(KUMIR2_PLUGIN_LINKER_FLAGS "-Wl,--no-undefined -Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN/..'")
set(KUMIR2_LAUNCHER_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN/../${KUMIR2_LIBS_DIR}'")
set(KUMIR2_TOOL_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN/../${KUMIR2_LIBS_DIR}'")
if(KUMIR2_ROOT)
set(KUMIR2_LIBRARY_LINKER_FLAGS "-L${KUMIR2_ROOT}/${KUMIR2_LIBS_DIR} -Wl,--no-undefined -Wl,--enable-new-dtags")
set(KUMIR2_PLUGIN_LINKER_FLAGS "-L${KUMIR2_ROOT}/${KUMIR2_LIBS_DIR} -Wl,--no-undefined -Wl,--enable-new-dtags")
set(KUMIR2_LAUNCHER_LINKER_FLAGS "-L${KUMIR2_ROOT}/${KUMIR2_LIBS_DIR} -Wl,--enable-new-dtags")
set(KUMIR2_TOOL_LINKER_FLAGS "-L${KUMIR2_ROOT}/${KUMIR2_LIBS_DIR} -Wl,--enable-new-dtags")
else()
set(KUMIR2_LIBRARY_LINKER_FLAGS "-Wl,--no-undefined -Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN'")
set(KUMIR2_PLUGIN_LINKER_FLAGS "-Wl,--no-undefined -Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN/..'")
set(KUMIR2_LAUNCHER_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN/../${KUMIR2_LIBS_DIR}'")
set(KUMIR2_TOOL_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,-rpath,'\$ORIGIN/../${KUMIR2_LIBS_DIR}'")
endif()
# CLang-specific compatibility options
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
......
......@@ -7,6 +7,14 @@ set(KUMIR2_PLUGINS_DIR "lib/kumir2/plugins") # libraries to be lo
set(KUMIR2_RESOURCES_DIR "share/kumir2") # non-executable resources
set(KUMIR2_LIBEXECS_DIR "bin") # executable supplementary binaries
if(NOT DEFINED KUMIR2_SDK_SCRIPTS_DIR)
set(KUMIR2_SDK_SCRIPTS_DIR "include") # devel scripts
endif(NOT DEFINED KUMIR2_SDK_SCRIPTS_DIR)
if(NOT DEFINED KUMIR2_SDK_CMAKE_DIR)
set(KUMIR2_SDK_CMAKE_DIR "include") # cmake files to use from others
endif(NOT DEFINED KUMIR2_SDK_CMAKE_DIR)
# Compile flags
set(KUMIR2_CXXFLAGS " -Zm300 -EHsc -GR -Y- -DWIN32 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS")
set(KUMIR2_CXXFLAGS_Release "-DNDEBUG -DQT_NO_DEBUG -MD")
......
......@@ -47,6 +47,8 @@ Section "Kumir" Kumir
File /r share\*
SetOutPath "$INSTDIR\src"
File /r src\*
#SetOutPath "$INSTDIR\include"
#File /r /nonfatal "include\*"
SetOutPath "$INSTDIR\llvm-mingw"
File /nonfatal /r llvm-mingw\*
......
......@@ -18,7 +18,6 @@ Example (create new actor skeleton):
../../../scripts/gen_actor_source.py --project mygreatactor.json
This will create the following files:
MyGreatActor.pluginspec -- actor plugin spec
CMakeLists.txt -- CMake project file
mygreatactormodule.h -- header skeleton
mygreatactormodule.cpp -- source skeleton
......@@ -166,6 +165,7 @@ import json
import string
import os
import inspect
from _ast import mod
def string_join(lines, sep):
......@@ -1511,6 +1511,17 @@ private:
}
""" % (self.class_name, self.class_name)
# noinspection PyPep8Naming
def createPluginSpecCppImplementation(self):
actor_name = self._module.name.get_camel_case_cpp_value()
return """
/* protected */ void %s::createPluginSpec()
{
_pluginSpec.name = "Actor%s";
_pluginSpec.gui = isGuiRequired();
}
""" % (self.class_name, actor_name)
# noinspection PyPep8Naming
def isGuiRequiredCppImplementation(self):
"""
......@@ -2350,10 +2361,10 @@ private:
return """
/* public */ QList<Shared::ActorInterface*> %s::usesList() const
{
static const QStringList usesNames = QStringList()
static const QList<QByteArray> usesNames = QList<QByteArray>()
<< %s ;
QList<Shared::ActorInterface*> result;
Q_FOREACH (const QString & name, usesNames) {
Q_FOREACH (const QByteArray & name, usesNames) {
ExtensionSystem::KPlugin * plugin = myDependency(name);
Shared::ActorInterface * actor =
qobject_cast<Shared::ActorInterface*>(plugin);
......@@ -3588,34 +3599,6 @@ $classImplementation
_update_file(file_base_name + ".cpp", target_dir, data)
def create_plugin_spec_file(module, target_dir=""):
"""
Creates or updates module plugin specification file
:type module: Module
:param module: actor module tree root
:type target_dir: str
:param target_dir: directory path to store (optional, by default uses current dir)
"""
file_name = "Actor" + module.name.get_camel_case_cpp_value() + ".pluginspec"
name = "Actor" + module.name.get_camel_case_cpp_value()
requires = ""
if module.uses_list:
plugin_names = map(lambda s: "Actor" + s, module.uses_list)
# noinspection PyUnresolvedReferences
requires = "requires = " + string.join(plugin_names, ", ")
if module.gui:
gui = "true"
else:
gui = "false"
data = """
name = %s
gui = %s
%s
""" % (name, gui, requires)
_update_file(file_name, target_dir, unicode(data.strip() + "\n"))
def create_cmakelists_txt(module, json_file_name, target_dir=""):
"""
Creates or updates project CMakeLists.txt file
......@@ -3630,42 +3613,15 @@ def create_cmakelists_txt(module, json_file_name, target_dir=""):
substitutions = {
"projectName": module.get_module_cpp_namespace(),
"moduleFileName": module.get_module_cpp_class_name().lower(),
"moduleBaseFileName": module.get_base_cpp_class_name().lower(),
"pluginFileName": module.get_plugin_cpp_class_name().lower(),
"specFileName": "Actor%s" % module.name.get_camel_case_cpp_value(),
"jsonFileName": os.path.basename(json_file_name),
"actorDir": module.name.get_camel_case_cpp_value().lower()
"actorName": module.name
}
data = _render_template(r"""
project($projectName)
cmake_minimum_required(VERSION 2.8.3)
if(NOT DEFINED USE_QT)
set(USE_QT 4)
endif(NOT DEFINED USE_QT)
if(${USE_QT} GREATER 4)
# Find Qt5
find_package(Qt5 5.3.0 COMPONENTS Core Widgets REQUIRED)
include_directories(${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS})
set(QT_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Widgets_LIBRARIES})
set(MOC_PARAMS "-I/usr/include/qt5"
"-I/usr/include/qt5/QtCore"
"-I${_qt5Core_install_prefix}/include/QtCore"
"-DQT_PLUGIN"
)
foreach(IDIR ${Qt5Core_INCLUDE_DIRS})
set(MOC_PARAMS "-I${IDIR}" ${MOC_PARAMS})
endforeach()
else()
# Find Qt4
set(QT_USE_QTMAIN 1)
find_package(Qt4 4.7.0 COMPONENTS QtCore QtGui QtXml QtSvg REQUIRED)
include(${QT_USE_FILE})
endif()
find_package(PythonInterp 3.2.0 REQUIRED)
include(../../kumir2_plugin.cmake)
cmake_minimum_required(VERSION 3.0)
find_package(Kumir2 REQUIRED)
kumir2_use_qt(Core Gui)
set(SOURCES
$moduleFileName.cpp
......@@ -3675,95 +3631,16 @@ set(MOC_HEADERS
$moduleFileName.h
)
add_custom_command(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/$moduleBaseFileName.cpp
${CMAKE_CURRENT_BINARY_DIR}/$moduleBaseFileName.h
${CMAKE_CURRENT_BINARY_DIR}/$pluginFileName.cpp
${CMAKE_CURRENT_BINARY_DIR}/$pluginFileName.h
${CMAKE_CURRENT_BINARY_DIR}/$specFileName.pluginspec
COMMAND ${PYTHON_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/../../../scripts/gen_actor_source.py
--update
${CMAKE_CURRENT_SOURCE_DIR}/$jsonFileName
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/$jsonFileName
${CMAKE_CURRENT_SOURCE_DIR}/../../../scripts/gen_actor_source.py
)
add_custom_target(
$specFileNamePluginSpec
ALL
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/$specFileName.pluginspec ${PLUGIN_OUTPUT_PATH}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/$specFileName.pluginspec
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$moduleBaseFileName.moc.cpp
COMMAND ${QT_MOC_EXECUTABLE}
-I${CMAKE_SOURCE_DIR}/src/shared
${MOC_PARAMS}
-o${CMAKE_CURRENT_BINARY_DIR}/$moduleBaseFileName.moc.cpp
${CMAKE_CURRENT_BINARY_DIR}/$moduleBaseFileName.h
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/$moduleBaseFileName.h
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$pluginFileName.moc.cpp
COMMAND ${QT_MOC_EXECUTABLE}
-I${CMAKE_SOURCE_DIR}/src/shared
${MOC_PARAMS}
-o${CMAKE_CURRENT_BINARY_DIR}/$pluginFileName.moc.cpp
${CMAKE_CURRENT_BINARY_DIR}/$pluginFileName.h
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/$pluginFileName.h
)
set(SOURCES_GENERATED
$moduleBaseFileName.cpp
$pluginFileName.cpp
)
set(MOC_SOURCES_GENERATED
$moduleBaseFileName.moc.cpp
$pluginFileName.moc.cpp
)
if(${USE_QT} GREATER 4)
qt5_wrap_cpp(MOC_SOURCES ${MOC_HEADERS})
else()
qt4_wrap_cpp(MOC_SOURCES ${MOC_HEADERS})
endif()
install(
FILES ${PLUGIN_OUTPUT_PATH}/$specFileName.pluginspec
DESTINATION ${PLUGINS_DIR}
)
kumir2_wrap_cpp(MOC_SOURCES ${MOC_HEADERS})
handleTranslation($specFileName)
add_library(
$specFileName
SHARED