Статическое определение проектов и инсталляций

  !   Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам)

Декларация проектов и необходимых им файлов/ресурсов отделена от спецификаций сборки модулей, скомпилированных из этих проектов, и собранных в разные инсталляционные пакеты.

Все инсталлируемые модули должны быть декларированы как проекты и их атрибуты и атрибуты инсталляционных таргетов, в которые они входят, должны быть корректно согласованы. На это предусмотрена автоматическая верификация во избежание сборки нестабльных дистрибутивов.

Декларации проектов

DeclareProjects.h

DECLARE_PROJECT(IbpTest)
    PROJECT_ids(PERMANENT_TYPE_ID(I b p T), =)
    PROJECT_for(prototest, "IBP module for Biomonex")
    PROJECT_opp(app, AV, mon)
    PROJECT_mod(generic)
    INSTALL_exe(internal)
 
DECLARE_PROJECT(Paradop)
    PROJECT_ids(PERMANENT_TYPE_ID(P d o p), =)
    PROJECT_for(enduser, "Asynchronous doppler device control")
    PROJECT_opp(app, VL, dop)
    PROJECT_mod(generic)
    INSTALL_exe(install)
    INSTALL_add(9, "DemoPlayback", "*.du*", ILM_Paradop_DemoDu)
    INSTALL_add(4, "DemoPlayback", "*.bin", ILM_Paradop_DemoBin)
    INSTALL_single("Firmware", "dig_32mH.bit", ILF_Paradop_BitDig32mh)
    INSTALL_single("Firmware", "dop3usb2__1_8.bit", ILF_Paradop_BitDop3218)
    INSTALL_single("Firmware", "dop_usb.bit", ILF_Paradop_BitDopUsb)
  • DECLARE_PROJECT() - указывает имя проекта/модуля для всех ссылок на него, новые проекты здесь ставить в алфавитном порядке
  • PROJECT_ids() - для формирования системного type<> всех проектов (не для прикладного использования)
  • PROJECT_for(purpose, sDescription) - назначение проекта
    • purpose - определяет текущеесостояние проекта
      • enduser- самый высокий контроль качества для поставок пользователям
      • development- важные инструментальные средства не поставляемые пользователям
      • prototest- временные экспериментальные хаки или еще не отлаженные/деградировавшие старые проекты не пригодные к поставкам пользователям
    • sDescription- не для пользователя а по сути
  • PROJECT_opp() - дислокация (верифицируется)
  • PROJECT_mod(module_mode) - тип проекта
    • module_mode-
      • generic - стандартный на UniversalViewDLL + стартер
      • console- все в одном exe
      • special- особое
  • INSTALL_exe(install_mode) - роль стартера в дистрибутиве (для отладки стартеры доступны всегда)
    • install_mode-
      • install- стартер подлежит инсталляции и доступен пользователю
      • internal- стартер не подлежит инсталляции и в норме не доступен пользователю
      • forbidden- стартер запрещен к использованию
  • INSTALL_single/INSTALL_add([nExpectCount], pathFolder, pathName, INS_Id) - декларирует либо один файл либо по маске из директории
    • nExpectCount- для INSTALL_add должно совпадать с реально существующим по этой маске количеством файлов
    • INS_Id - TBD
Декларации инсталляционных таргетов
Install_all_targets.h

Должен содержать все активные таргеты. Тогда они доступны для выбора и верифицируются.

Install_target_*.h
BEGIN_INSTALL_TARGET(TargetName, purpose)
 
#include " ... /Install_subset_Universal.h"
#include " ... /Install_subset_Xxxxxx.h"
 
    INCLUDE_PROJECT(exe, MyMainProject)
 
    INCLUDE_PROJECT(dll, SomeOtherModule)
 
    ...
 
END_INSTALL_TARGET()
  • TargetName- совпадает с именем основного инсталлируемого проекта
  • purpose- верифицируется на соответствовие PROJECT_for() всех входящих в таргет проектов, так что не качественные и ограниченные к распространению модули не попадут в дистрибутив предназначенный для распространения (качественные модули в ограниченном дистрибутиве допускаются)
  • #include- добавляет профили субсетов с типовым набором модулей, все проекты которых должны удовлетворять требованиям инсталлируемости в даном таргете
  • INCLUDE_PROJECT() - включает в дистрибутив проект со всеми декларированными с ним файлами, а наличие стартера определяется параметром:
    • exe- стартер есть если допустим делкларациями для этого проекта/таргета
    • dll - стартер исключается из данного таргета даже если возможен
Install_subset_*.h

Декларирует профили наборов взаимосвязанных между собой модулей для включения в разные таргеты. Минимизирует дублирование.

Вложенные субсеты запрещены.

BEGIN_INSTALL_SUBSET(SubsetName)
 
    INCLUDE_PROJECT(dll, Xxxx)
 
    INCLUDE_PROJECT(dll, Yyyy)
 
    INCLUDE_PROJECT(exe, Zzzz)
 
    ...
 
END_INSTALL_SUBSET()

Те же правила для INCLUDE_PROJECT() действуют что и при включении модулей в таргет напрямую.

Перекомпиляция при изменениях

Обязательно докомпиляция Biins где все основные проверки. Стартовые регресс тесты проверяют дополнительно консистентность того что не проверяет статически компилятор.

Возможно нужна модификация Install_all_targets.h при некоторых локальных изменениях в хидерах таргетов.

Сильные изменения могут потребовать полной перекомпиляции всего.

Уровни контроля
  • Что то проверяется компилятором т.к. макросы транслируются во внутренний type<>. Но эти проверки ограничены.
  • Важны регресстесты Biins запускаемые теперь первыми всегда. Там контролируются глубже все атрибуты и наличие файлов по факту.
  • Контроль качества подготовки к релизам и интеграциямеще глубже сканирует все исходники.
  • При генерации дистрибутива происходит финальный набор проверок.

Многие проверки выводят в ASSERT в #define декларации чтобы прямо при сбое указывать в нужную строку где ошибка.

Нестандартные файлы

Использование DEFINE_CUSTOM_INSTALL и INSTALL_REDIST_DLL ограничено системными задачами и общее для всех таргетов.