blob: 87c8818fb520d8ec551e5c9ff349f1b4672fe095 [file] [log] [blame]
/// *************************************************************
///
/// 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 <typename T>
class List<T> {};
/// 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 <typename K, typename V>
class Map<K,V> {};
/// 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<CObject> 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<CxxObject> cobjects);
/// Add multiple CxxObject s to be compiled and linked (with exceptions enabled).
void add_exception_objects(List<CxxObject> cobject);
/// Add libraries to link against dynamically.
void add_linked_libs(List<Library> linked_libs);
/// Add libraries to link against statically.
void add_linked_static_libs(List<StaticLibrary> 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<CxxObject> cobject);
/// Set auxiliary files that are produced by linking (for cleanup and copying).
void set_auxtargets(List<Path> 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<Path> 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<Package> packages);
/// Add multiple SdiTargets that need to be delivered/generated
/// before compilation or dependency generation can start.
void add_sdi_headers(List<SdiTarget> 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<String> 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<String> 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<String> 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<Path> 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<Path> 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<SrsTarget> srs);
};
}};
/* vim: set filetype=cpp : */