1/// *************************************************************
2///
3///  Licensed to the Apache Software Foundation (ASF) under one
4///  or more contributor license agreements.  See the NOTICE file
5///  distributed with this work for additional information
6///  regarding copyright ownership.  The ASF licenses this file
7///  to you under the Apache License, Version 2.0 (the
8///  "License"); you may not use this file except in compliance
9///  with the License.  You may obtain a copy of the License at
10///
11///    http://www.apache.org/licenses/LICENSE-2.0
12///
13///  Unless required by applicable law or agreed to in writing,
14///  software distributed under the License is distributed on an
15///  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16///  KIND, either express or implied.  See the License for the
17///  specific language governing permissions and limitations
18///  under the License.
19///
20/// *************************************************************
21#include <types.h>
22
23namespace gb
24{
25    using namespace types;
26
27    class LinkTarget;
28
29    class StaticLibrary : public IsCleanable, public HasDependencies, public IsLinking, public DeliversHeaders, public HasCompileSettings, public Target
30    {
31        public:
32            StaticLibrary(String name);
33            /// Returns how the library is named in the filesystem on the current platform.
34            /// StaticLibrary filename schemes are defined in solenv/gbuild/libnames.mk (with some platformdependant hacks in solenv/gbuild/platform/*.mk.
35
36            /// This function needs to be defined in solenv/gbuild/target_names.mk so that it is available to everywhere.
37            Path get_filename();
38
39        private:
40            /// private helper function for the constructor
41            void StaticLibrary_impl(LinkTarget library_linktarget);
42            /// helper function to wrap LinkTargets functions (this is more or less pimpl ...).
43            void forward_to_linktarget(Function f);
44
45            /// List of buildable static libraries (i.e. static libraries that are not expected to exist outside of \$(OUTDIR) on the system).
46            static const List<StaticLibrary> TARGETS;
47            /// List of additional defines for compiling objects for static libraries
48            static const List<String> DEFS;
49            /// List of additional flags for linking a static library
50            static const List<String> TARGETTYPEFLAGS;
51            /// Mapping from symbolic static library names to filenames
52            static const Map<StaticLibrary,Path> FILENAMES;
53            /// location to place static libraries in the \$(OUTDIR)
54            static const Path OUTDIRLOCATION;
55            /// platformdependant file extension for static libraries
56            static const String PLAINEXT;
57    };
58}
59/* vim: set filetype=cpp : */
60