/// ************************************************************* /// /// Licensed to the Apache Software Foundation (ASF) under one /// or more contributor license agreements. See the NOTICE file /// distributed with this work for additional information /// regarding copyright ownership. The ASF licenses this file /// to you under the Apache License, Version 2.0 (the /// "License"); you may not use this file except in compliance /// with the License. You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, /// software distributed under the License is distributed on an /// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY /// KIND, either express or implied. See the License for the /// specific language governing permissions and limitations /// under the License. /// /// ************************************************************* namespace gb { class CObject; class CxxObject; class Library; class StaticLibrary; class Package; class SdiTarget; }; namespace gb { namespace types { /// A type of target, with its set of rules etc., as used in the build system. class TargetType {}; /// A plain old string. class String {}; /// A partial, relative or absolute filesystem path. class Path {}; /// A target to be build. class Target { public: /// The absolute filesystem path representing the target. /// This function needs to be defined in solenv/gbuild/target_names.mk so that it is available to everywhere. Path get_target(); }; /// A partial or complete shell-command. class Command {}; /// A integer number. class Integer {}; /// A boolean value. /// There are const boolean values true and false for /// comparisons (written as $(true) and $(false) in makefiles. class Bool {}; /// A language (for localisation) /// A language represented by its ISO 639-1:2002 code. class Language {}; /// A List of objects. /// A List of objects represented by a whitespace separated list /// in makefiles. template class List {}; /// A Mapping from with a key of type K and a value of type V /// A Mapping is represented by a whitespace separated list /// of key-value pairs. Key and value are separated by a colon (:). template class Map {}; /// A target that can be cleaned. class IsCleanable { public: /// The (phony) absolute filesystem path to clean the target. /// This function needs to be defined in solenv/gbuild/target_names.mk so that it is available to everywhere. Path get_clean_target(); }; /// A target that has generated dependencies. class HasDependencies { public: /// The absolute filesystem path to the file containing the dependencies. /// This function needs to be defined in solenv/gbuild/target_names.mk so that it is available to everywhere. Path get_dep_target(); }; /// A target that has a source file from which it is generated. class HasSource { public: /// The absolute filesystem path to the source file. Path get_source(); }; /// A target that links objects and libraries. class IsLinking { public: /// Add a CObject to be compiled and linked. void add_cobject(CObject cobject); /// Add multiple CObject s to be compiled and linked. void add_cobjects(List cobjects); /// Add a CxxObject to be compiled and linked. void add_cxxobject(CxxObject cobject); /// Add multiple CxxObject s to be compiled and linked. void add_cxxobjects(List cobjects); /// Add multiple CxxObject s to be compiled and linked (with exceptions enabled). void add_exception_objects(List cobject); /// Add libraries to link against dynamically. void add_linked_libs(List linked_libs); /// Add libraries to link against statically. void add_linked_static_libs(List linked_static_libs); /// Add multiple CxxObject s to be compiled and linked (without exceptions enabled). /// @deprecated We should not care about disabling exception. void add_noexception_objects(List cobject); /// Set auxiliary files that are produced by linking (for cleanup and copying). void set_auxtargets(List auxtargets); /// Set the location for the produced DLL (used on Windows only). void set_dll_target(Path dlltarget); /// Set additional flags for the link command. void set_ldflags(List ldflags); }; /// A target that delivers headers of some kind. class DeliversHeaders { public: /// The absolute filesystem path which is touched when all headers for this target are prepared. /// This function needs to be defined in solenv/gbuild/target_names.mk so that it is available to everywhere. Path get_headers_target(); /// The absolute filesystem path which is touched when all external headers for this target are prepared. /// This function needs to be defined in solenv/gbuild/target_names.mk so that it is available to everywhere. Path get_external_headers_target(); /// Add multiple Packages that need to be delivered/generated /// before compilation or dependency generation can start. void add_package_headers(List packages); /// Add multiple SdiTargets that need to be delivered/generated /// before compilation or dependency generation can start. void add_sdi_headers(List sdis); }; /// A target where settings for the compilation can be set. class HasCompileSettings { public: /// Sets flags for plain C compilation. /// \$\$(CFLAGS) contains the current flags and can be used if /// just a few need to be modified. void set_cflags(List cflags); /// Sets flags for C++ compilation. /// \$\$(CXXFLAGS) contains the current flags and can be used if /// just a few need to be modified. void set_cxxflags(List cxxflags); /// Sets defines for C/C++ compilation. /// \$\$(DEFS) contains the current flags and can be used if /// just a few need to be modified. void set_defs(List defs); /// Sets the include paths for C/C++ compilation. /// \$\$(INCLUDE) contains the current paths and can be used if /// just a few need to be modified. void set_include(List include); /// Sets the stl include paths for C++ compilation. /// \$\$(INCLUDE_STL) contains the current paths and can be used if /// just a few need to be modified. void set_include_stl(List include_stl); }; /// A target using the resource compiler class UsesRsc { public: /// The command to execute rsc. static const Command RSCCOMMAND; /// The target on with to depend to make sure the rsc executable is available. static const Path RSCTARGET; }; /// A target processing a set of srs files class HasSrs { public: /// Add a SrsTarget to be processed. void add_one_srs(SrsTarget srs); /// Add multiple SrsTarget s to be processed. void add_srs(List srs); }; }}; /* vim: set filetype=cpp : */