// file      : build/bin/target -*- C++ -*-
// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

#ifndef BUILD_BIN_TARGET
#define BUILD_BIN_TARGET

#include <build/target>

namespace build
{
  namespace bin
  {
    // The obj{} target group.
    //
    class obja: public file
    {
    public:
      using file::file;

    public:
      virtual const target_type& type () const {return static_type;}
      static const target_type static_type;
    };

    class objso: public file
    {
    public:
      using file::file;

    public:
      virtual const target_type& type () const {return static_type;}
      static const target_type static_type;
    };

    class obj: public target
    {
    public:
      using target::target;

      obja* a {nullptr};
      objso* so {nullptr};

    public:
      virtual const target_type& type () const {return static_type;}
      static const target_type static_type;
    };

    class exe: public file
    {
    public:
      using file::file;

    public:
      virtual const target_type& type () const {return static_type;}
      static const target_type static_type;
    };

    // The lib{} target group.
    //
    class liba: public file
    {
    public:
      using file::file;

    public:
      virtual const target_type& type () const {return static_type;}
      static const target_type static_type;
    };

    class libso: public file
    {
    public:
      using file::file;

    public:
      virtual const target_type& type () const {return static_type;}
      static const target_type static_type;
    };

    class lib: public target
    {
    public:
      using target::target;

      liba* a {nullptr};
      libso* so {nullptr};

    public:
      virtual const target_type& type () const {return static_type;}
      static const target_type static_type;
    };
  }
}

#endif // BUILD_BIN_TARGET