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 Library : public IsCleanable, public HasDependencies, public IsLinking, public DeliversHeaders, public HasCompileSettings, public Target
30    {
31        public:
32            Library(String name);
33            /// Returns how the library is named in the filesystem on the current platform.
34            /// Library 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 Library_impl(LinkTarget library_linktarget);
42            /// platformdependant additional setup for constructor (used on Windows only)
43            void Library_platform(
44                LinkTarget library_linktarget,
45                Path dllfile);
46            /// helper function to wrap LinkTargets functions (this is more or less pimpl ...)
47            void forward_to_linktarget(Function f);
48
49            /// List of buildable libraries (i.e. libraries that are not expected to exist outside of \$(OUTDIR) on the system).
50            static const List<Library> TARGETS;
51            /// List of additional defines for compiling objects for libraries
52            static const List<String> DEFS;
53            /// List of additional flags for linking a library
54            static const List<String> TARGETTYPEFLAGS;
55            /// Mapping from symbolic library names to dll filenames
56            static const Map<Library,Path> DLLFILENAMES;
57            /// Mapping from symbolic library names to filenames
58            static const Map<Library,Path> FILENAMES;
59    };
60}
61/* vim: set filetype=cpp : */
62