Warning, /office/kexi/KexiProducts.cmake is written in an unsupported language. File is not indexed.
0001 ### DEFINITION OF PRODUCTS, FEATURES AND PRODUCTSETS
0002 ####################################################
0003
0004 # When building KEXI a lot of different things are created and installed. To
0005 # describe them and their internal dependencies the concepts of "product",
0006 # "feature" and "product set" are used.
0007
0008 # A "product" is the smallest functional unit which can be created in the build
0009 # and which is useful on its own when installed. Examples are e.g. libraries,
0010 # plugins or executables. Products have external and internal required
0011 # dependencies at build-time. Internal dependencies are noted in terms of other
0012 # products or features (see below) and could be e.g. other libraries to link
0013 # against or build tools needed to generate source files.
0014 # A product gets defined by setting an identifier, a descriptive fullname and
0015 # the needed internal build-time requirements. Any other product or feature
0016 # listed as requirement must have been defined before.
0017
0018 # A "feature" is not a standalone product, but adds abilities to one or multiple
0019 # given products. One examples is e.g. scriptability. Features have external and
0020 # internal required dependencies at build-time. Internal dependencies are noted
0021 # in terms of other products or features and could be e.g. other libraries to
0022 # link against or build tools needed to generate source files.
0023 # A feature gets defined by setting an identifier, a descriptive fullname and
0024 # the needed internal build-time requirements. Any other product or feature
0025 # listed as requirement must have been defined before.
0026
0027 # A "productset" is a selection of products and features which should be build
0028 # together. The products and features can be either essential or optional to the
0029 # set. If essential (REQUIRES), the whole productset will not be build if a
0030 # product or feature is missing another internal or external dependency. If
0031 # optional (OPTIONAL), the rest of the set will still be build in that case.
0032 # The products and features to include in a set can be listed directly or
0033 # indirectly: they can be named explicitly, but also by including other
0034 # productsets in a set, whose products and features will then be part of the
0035 # first set as well.
0036 # Products, features and productsets can be listed as dependencies in multiple
0037 # product sets. As with dependencies for products or features, they must have
0038 # been defined before.
0039
0040 # Products, features and product sets are in the same namespace, so a given
0041 # identifier can be only used either for a product or for a feature or for a
0042 # product set.
0043
0044 # The ids of products and features (but not sets) are used to generate cmake
0045 # variables SHOULD_BUILD_${ID}, which then are used to control what is build and
0046 # how.
0047
0048
0049 #############################################
0050 #### Product definitions ####
0051 #############################################
0052
0053 # For defining new products see end of this file, "How to add another product?"
0054
0055 # IDEA: also add headers/sdk for all the libs ("_DEVEL"?)
0056 # IDEA: note external deps for products, so they are only checked if needed
0057 # There can be required or optional external deps, required will also result
0058 # in automatic disabling of product building
0059 # TODO: some products have multiple optional requirements, but need at least one.
0060 # See APP_CONVERTER, FILEMANAGER_*
0061
0062 # products
0063 calligra_define_product(KEXI_CORE_APP "KEXI core app" REQUIRES)
0064 calligra_define_product(KEXI_DESKTOP_APP "KEXI for desktop" REQUIRES KEXI_CORE_APP)
0065 calligra_define_product(KEXI_MOBILE_APP "KEXI for mobile" REQUIRES KEXI_CORE_APP)
0066
0067 # more plugins
0068 calligra_define_product(PLUGIN_KEXI_SPREADSHEETMIGRATION "Import from ODS plugin for KEXI"
0069 UNPORTED REQUIRES KEXI_CORE_APP)
0070
0071 #############################################
0072 #### Product set definitions ####
0073 #############################################
0074
0075 # For defining new productsets see end of this file,
0076 # "How to add another productset?"
0077
0078 # (products sets are defined in cmake/productsets/*.cmake files)
0079
0080 # How to add another product?
0081 # ===========================
0082 #
0083 # 1. Define the product by a call of calligra_define_product,
0084 # e.g.
0085 #
0086 # calligra_define_product(MYPRODUCT "title of product")
0087 #
0088 # For the product id use a proper prefix (LIB_, PLUGIN_, FILTER_, APP_, PART_,
0089 # ...), whatever is appropriate.
0090 #
0091 # 2. Extend that call with a REQUIRES argument section, if the product has
0092 # hard internal build-time dependencies on other products or features.
0093 # Products/features that are listed as dependencies have to be defined before
0094 # (see also the API doc in cmake/modules/CalligraProductSetMacros.cmake)
0095 # E.g.
0096 #
0097 # calligra_define_product(MYPRODUCT "title of product" REQUIRES P1 P2)
0098 #
0099 # 3. Add a rule when to not build the product, in the section "Detect which
0100 # products/features can be compiled" of the toplevel CMakeLists.txt. Each
0101 # product should have their own boolean expression when to set the build flag
0102 # to FALSE, e.g.
0103 #
0104 # if (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
0105 # set(SHOULD_BUILD_MYPRODUCT FALSE)
0106 # endif ()
0107 #
0108 # 4. Wrap everything belonging to the product with the build flag of the product.
0109 # Ideally this is done around subdirectory inclusions, results in easier code.
0110 # e.g.
0111 #
0112 # if (SHOULD_BUILD_MYPRODUCT)
0113 # add_subdirectory(myproduct)
0114 # endif ()
0115 #
0116 # 5. Tag the product as STAGING, if it is not yet ready for release, but already
0117 # integrated in the master branch, e.g.
0118 #
0119 # calligra_define_product(MYPRODUCT "title of product" STAGING REQUIRES P1)
0120 #
0121 # 6. Add the product to all products, features and product sets which have this
0122 # product as REQUIRED or OPTIONAL dependency.
0123 #
0124 #
0125 # How to add another feature?
0126 # ===========================
0127 #
0128 # 1. Define the feature by a call of calligra_define_feature,
0129 # e.g.
0130 #
0131 # calligra_define_feature(MYFEATURE "title of feature")
0132 #
0133 # For the feature id use a proper prefix (FEATURE_, ...), whatever is
0134 # appropriate.
0135 #
0136 # 2. Extend that call with a REQUIRES argument section, if the feature has
0137 # hard internal build-time dependencies on other products or features.
0138 # Products or features that are listed as dependencies have to be defined
0139 # before
0140 # (see also the API doc in cmake/modules/CalligraProductSetMacros.cmake)
0141 # E.g.
0142 #
0143 # calligra_define_feature(MYFEATURE "title of feature" REQUIRES P1 F1)
0144 #
0145 # 3. Add a rule when to not build the feature, in the section "Detect which
0146 # products/features can be compiled" of the toplevel CMakeLists.txt. Each
0147 # feature should have their own boolean expression when to set the build flag
0148 # to FALSE, e.g.
0149 #
0150 # if (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
0151 # set(SHOULD_BUILD_MYFEATURE FALSE)
0152 # endif ()
0153 #
0154 # 4. Wrap everything belonging to the feature with the build flag of the feature.
0155 # Ideally this is done around subdirectory inclusions, results in easier code.
0156 # e.g.
0157 #
0158 # if (SHOULD_BUILD_MYFEATURE)
0159 # add_subdirectory(myproduct)
0160 # endif ()
0161 #
0162 # 5. Tag the feature as STAGING, if it is not yet ready for release, but already
0163 # integrated in the master branch, e.g.
0164 #
0165 # calligra_define_product(MYFEATURE "title of feature" STAGING REQUIRES P1 F1)
0166 #
0167 # 6. Add the feature to all products, features and product sets which have this
0168 # product as REQUIRED or OPTIONAL dependency.
0169 #
0170 #
0171 # How to add another productset?
0172 # ==============================
0173 #
0174 # There are two possible places to put a productset definition. The first is to
0175 # add it to this file, which should be done for more generic sets that are
0176 # useful for many people. The second is a file of its own, in the directory
0177 # "cmake/productsets", which should be done for more special ones or for those
0178 # which should not be added to the repository.
0179 # The file must be named with the name of the productset in lowercase and have
0180 # the extension ".cmake".
0181 #
0182 # 1. Define the productset by a call of calligra_define_productset,
0183 # e.g.
0184 #
0185 # calligra_define_productset(MYPRODUCTSET "title of productset")
0186 #
0187 # 2. Extend that call with REQUIRES or OPTIONAL argument sections, if the productset
0188 # has hard or soft internal dependencies on other products, features or
0189 # productsets.
0190 # Products, features or productsets that are listed as dependencies have to
0191 # be defined before
0192 # (see also the API doc in cmake/modules/CalligraProductSetMacros.cmake)
0193 # E.g.
0194 #
0195 # calligra_define_productset(MYPRODUCT "title of product"
0196 # REQUIRES P1 P2 F1 PS1
0197 # OPTIONAL P3 F2 PS2)
0198 #
0199 # 3. Add the productset to all product sets which have this product set as
0200 # REQUIRED or OPTIONAL dependency.
0201 #
0202 # Example for a file-based productset definition:
0203 # You want a productset "MYWORDS". For that you add a file named
0204 # "mywords.cmake" into the directory "cmake/productsets", with the content:
0205 # --- 8< ---
0206 # calligra_define_productset(MYWORDS "My Words"
0207 # REQUIRES
0208 # APP_WORDS
0209 # PLUGIN_DEFAULTTOOLS
0210 # PLUGIN_DOCKERS
0211 # PLUGIN_PATHSHAPES
0212 # PLUGIN_VARIABLES
0213 # PLUGIN_TEXTSHAPE
0214 # PLUGIN_PLUGINSHAPE
0215 # PLUGIN_FORMULASHAPE
0216 # )
0217 # --- 8< ---