Added Logo

This commit is contained in:
Medusa Slockbower 2025-06-02 23:35:03 -04:00
parent 29f21d84d8
commit d3eba6560d
12 changed files with 255 additions and 44 deletions

View File

@ -33,6 +33,7 @@ add_library(fennec STATIC
include/fennec/lang/detail/__numeric_transforms.h
include/fennec/lang/detail/__type_traits.h
include/fennec/lang/detail/__variadics.h
# MEMORY ===============================================================================================================
@ -70,9 +71,6 @@ add_library(fennec STATIC
include/fennec/math/detail/__fwd.h
include/fennec/math/detail/__types.h
include/fennec/math/detail/__vector_traits.h
include/fennec/lang/detail/__variadics.h
)
add_subdirectory(metaprogramming)

View File

@ -1,12 +1,21 @@
# fennec
*a free and open source game engine*
<br><br>
<div style="width: 100%;">
<img src="./logo/raster.png" alt="drawing" width="128px" style="display: block; margin-left: auto; margin-right: auto;"/>
<figcaption>
<h1 style="text-align: center; top:-1em;">fennec</h1>
<p style="text-align: center; top:-4em;">a free and open source game engine</p>
</figcaption>
</div>
<br><br>
## Table of Contents
1. [Introduction](#introduction)
2. [Building from Source](#building-from-source)
1. [Building from Terminal](#building-from-terminal)
2. [Building on Windows](#building-on-windows)
3. [Running the Test Suite](#running-the-test-suite)
1. [Introduction](#introduction)
2. [Building from Source](#building-from-source)
1. [Building from Terminal](#building-from-terminal)
2. [Building on Windows](#building-on-windows)
3. [Running the Test Suite](#running-the-test-suite)
<br>
@ -17,14 +26,23 @@
fennec is designed to be a general purpose, educational game engine.
Interfacing with the API in C++ follows the [GNU Coding Standards](https://www.gnu.org/prep/standards/html_node/index.html).
Some main areas where the engine strays from the GNU standard includes the following:
- [Section 4.7, Standards for Graphical Interfaces](https://www.gnu.org/prep/standards/html_node/Graphical-Interfaces.html).
fennec provides an implementation for X11, however it does not use the GTK toolkit.
<br>
Some main areas where the engine strays from the GNU standard includes the following:
The C++ stdlib is reimplemented in the fennec engine.
There are a few reasons for this:
- [Section 4.7, Standards for Graphical Interfaces](https://www.gnu.org/prep/standards/html_node/Graphical-Interfaces.html).
fennec provides an implementation for X11, however it does not use the GTK toolkit.
1. Standardize implementations across compilers
2. Set proper naming conventions, i.e. `std::vector`->`fennec::dynarray`
3. Optimize compilation times, binary size, and performance.
4. Inject debugging information when necessary.
5. Expose functionality in a readable manner for those interested in learning the
intricacies of the implementation.
<br>
@ -107,4 +125,9 @@ cmake -G "Visual Studio 17 2022" -A x64
## Running the Test Suite
`test.sh` provides profiles for building the test suite and executes them.
`test.sh` provides profiles for building the test suite and executes them.
By default, it runs in debug mode and the first failed test will throw an assertion.
Any tests that involve running as an application will spawn a subprocess with a window,
and give a short description of the behaviour in the terminal. It will then have you confirm
whether the information displayed is correct.

View File

@ -21,7 +21,7 @@
Help()
{
echo "Bash script for building fennec from source."
echo "Bash script for building fennec from source. By default, the build script executes in release mode."
echo
echo "GNU long options:"
echo "--help (-h) = Print this help info."
@ -82,6 +82,11 @@ All()
# Main Program =========================================================================================================
if [[ $# -eq 0 ]] ; then
Release
exit 0
fi
while [ "${1:-}" != '' ]; do
case "$1" in
'--debug' | '-d')

View File

@ -43,7 +43,8 @@ public:
using alloc_t = Alloc;
dynarray() : _alloc(), _size(0) {}
dynarray()
dynarray(size_t size) : _alloc(size), _size(size) { }
dynarray(const alloc_t& alloc) : _alloc(alloc), _size(0) {}
private:
allocation<element_t, alloc_t> _alloc;

View File

@ -20,7 +20,7 @@
#ifndef FENNEC_LANG_INTRINSICS_H
#define FENNEC_LANG_INTRINSICS_H
// Most major compilers support __has_builtin
// Most major compilers support __has_builtin, notably GCC, MINGW, CLANG, and MSVC
#if defined(__has_builtin)
@ -91,6 +91,14 @@
# define FENNEC_HAS_BUILTIN_IS_STANDARD_LAYOUT 0
#endif
// Difficult and Inconsistent without intrinsics
#if __has_builtin(__is_constructible)
# define FENNEC_BUILTIN_CAN_CONSTRUCT 1
# define FENNEC_BUILTIN_CAN_CONSTRUCT(type, args...) __is_constructible(type, args)
#else
# define FENNEC_HAS_BUILTIN_CAN_CONSTRUCT 0
#endif
// For compilers without or differently named builtins
#else

View File

@ -204,8 +204,18 @@ template<typename T0, typename T1> struct can_convert
/// \brief shorthand
/// \param T0 First type
/// \param T1 Second type
template<typename T0, typename T1> using can_convert_v = typename can_convert<T0, T1>::type;
template<typename T0, typename T1> using can_convert_v
= typename can_convert<T0, T1>::type;
// fennec::is_constructible ============================================================================================
template<typename ClassT, typename...ArgsT> struct can_construct
: bool_constant<FENNEC_BUILTIN_CAN_CONSTRUCT(ClassT, ArgsT...)> {};
template<typename ClassT, typename...ArgsT> constexpr bool_t can_construct_v
= can_construct<ClassT, ArgsT...>{};
//

View File

@ -106,6 +106,8 @@ public:
/// \brief Rebinds the allocator type to produce an element type of type `TypeT`
template<typename TypeT> using rebind = typename __rebind<Alloc, TypeT>::type;
// TODO: allocator_traits static functions
};
@ -180,19 +182,22 @@ public:
///
/// \brief Default Constructor, initializes internal data to `null` and the capacity to `0`
constexpr allocation() noexcept : _data(nullptr), _capacity(0) {}
constexpr allocation() noexcept
: _data(nullptr), _capacity(0) {}
///
/// \brief Sized Constructor, initializes the allocation with a block of size `n * sizeof(T)` bytes
/// \param n The number of elements of type `T` to allocate for
constexpr allocation(size_t n) noexcept : _data(_alloc.al), _capacity(n) {}
constexpr allocation(size_t n) noexcept
: _data(_alloc.al), _capacity(n) {}
///
/// \brief Allocator Constructor
/// \param alloc The allocation object to copy.
///
/// \details This constructor should be used when the type `AllocT` needs internal data.
constexpr allocation(const alloc_t& alloc) noexcept : _alloc(alloc), _data(nullptr), _capacity(0) {}
constexpr allocation(const alloc_t& alloc) noexcept
: _alloc(alloc), _data(nullptr), _capacity(0) {}
///
/// \brief Sized Allocator Constructor
@ -200,7 +205,24 @@ public:
/// \param alloc The allocation object to copy.
///
/// \details This constructor should be used when the type `AllocT` needs internal data.
constexpr allocation(size_t n, const alloc_t& alloc) noexcept : _alloc(alloc), _data(nullptr), _capacity(0) {}
constexpr allocation(size_t n, const alloc_t& alloc) noexcept
: _alloc(alloc), _data(nullptr), _capacity(0) {}
///
/// \brief Copy Constructor, creates an allocation of equal size and performs a byte-wise copy
/// \param alloc The allocation to copy
constexpr allocation(const allocation& alloc) noexcept
: _alloc(alloc._alloc), _data(_alloc.allocate(alloc._capacity)), _capacity(alloc._capacity)
{ fennec::memcpy(_data, alloc._data, alloc._capacity * sizeof(T)); }
///
/// \brief Move Constructor, moves the data in `alloc` to the new object and cleans `alloc` so that it
/// can safely destruct
/// \param alloc The allocation to move
constexpr allocation(allocation&& alloc) noexcept
: _alloc(alloc._alloc), _data(alloc._data), _capacity(alloc._capacity)
{ alloc._data = nullptr; alloc._capacity = 0; }
///
/// \brief Default Destructor, releases the memory block if still present

View File

@ -20,6 +20,7 @@
#ifndef FENNEC_MEMORY_H
#define FENNEC_MEMORY_H
#include <fennec/lang/type_traits.h>
#include <fennec/memory/detail/__memory.h>
namespace fennec
@ -152,22 +153,6 @@ constexpr void* memset(void* dst, int ch, size_t n)
return dst;
}
template<typename TypeT>
struct default_delete
{
constexpr default_delete() noexcept = default;
template<class U> default_delete(const default_delete<U>&) noexcept;
template<class U> default_delete(const default_delete<U[]>&) noexcept;
};
template<typename TypeT>
struct default_delete<TypeT[]>
{
};
}
#endif // FENNEC_MEMORY_H

View File

@ -19,19 +19,105 @@
#ifndef FENNEC_LANG_POINTERS_H
#define FENNEC_LANG_POINTERS_H
#include <fennec/lang/type_traits.h>
template<typename TypeT, class DeleteT = >
namespace fennec
{
template<typename TypeT>
struct default_delete
{
///
/// \brief Default constructor
constexpr default_delete() noexcept = default;
///
/// \brief Conversion Constructor
/// \tparam ConvT of other deleter
template<class ConvT> requires requires { can_convert<ConvT*, TypeT*>{}.value == true; }
constexpr default_delete(const default_delete<ConvT>&) noexcept {}
///
/// \brief Function Call Operator, calls `delete` on `ptr`
/// \param ptr Memory resource to delete
constexpr void operator()(TypeT* ptr) const noexcept
{
static_assert(not is_void_v<TypeT>, "cannot delete a pointer to an incomplete type");
static_assert(not sizeof(TypeT) > 0, "cannot delete a pointer to an incomplete type");
delete ptr;
}
};
template<typename TypeT>
struct default_delete<TypeT[]>
{
///
/// \brief Default constructor
constexpr default_delete() noexcept = default;
///
/// \brief Conversion Constructor
/// \tparam ConvT of other deleter
template<class ConvT> requires requires { can_convert<ConvT(*)[], TypeT(*)[]>{}.value == true; }
constexpr default_delete(const default_delete<ConvT(*)[]>&) noexcept {}
///
/// \brief Function Call Operator, calls `delete` on `ptr`
/// \param ptr Memory resource to delete
template<class ArrT> requires requires { can_convert<ArrT(*)[], TypeT(*)[]>{}.value == true; }
constexpr void operator()(TypeT* ptr) const noexcept
{
static_assert(not is_void_v<TypeT>, "cannot delete a pointer to an incomplete type");
static_assert(not sizeof(TypeT) > 0, "cannot delete a pointer to an incomplete type");
delete[] ptr;
}
};
template<typename TypeT, class DeleteT = default_delete<TypeT>>
class unique_ptr
{
public:
/// \brief the element type
using element_t = TypeT;
/// \brief pointer to element type
using pointer_t = element_t*;
/// \brief the deleter
using delete_t = DeleteT;
///
/// \brief Default Constructor, creates a unique_ptr that owns nothing.
constexpr unique_ptr() : unique_ptr(nullptr) {}
constexpr unique_ptr(pointer_t ptr) : _handle(ptr) {}
///
/// \brief Nullptr Constructor, creates a unique_ptr that owns nothing.
constexpr unique_ptr(nullptr_t) noexcept : unique_ptr(nullptr) {}
///
/// \brief Pointer Constructor, creates a unique_ptr that owns `ptr` with deleter `del`
/// \param ptr The resource to own
/// \param del The deleter
explicit constexpr unique_ptr(pointer_t ptr, const delete_t& del) : _delete(del), _handle(ptr) {}
///
/// \brief Pointer Constructor, creates a unique_ptr that owns `ptr` with deleter `del`
/// \param ptr The resource to own
/// \param del The deleter
explicit constexpr unique_ptr(pointer_t ptr, delete_t&& del) : _delete(del), _handle(ptr) {}
///
/// \brief Move Constructor, transfers ownership from `other`
/// \param other The unique_ptr to take ownership from
constexpr unique_ptr(unique_ptr&& other) : _handle(other._handle) { other._handle = nullptr; }
constexpr ~unique_ptr() { if(_handle) ::operator delete(_handle); }
// Delete copy constructor
constexpr unique_ptr(const unique_ptr&) = delete;
///
/// \brief Default Constructor, if it owns a resource, it deletes it using `delete_t`
constexpr ~unique_ptr() { if(_handle) _delete(_handle); }
constexpr unique_ptr& operator=(unique_ptr&& r) noexcept
{ _handle = r._handle; r._handle = nullptr; return *this; }
@ -40,7 +126,10 @@ public:
private:
delete_t _delete;
pointer_t _handle;
};
}
#endif // FENNEC_LANG_POINTERS_H

BIN
logo/raster.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

70
logo/vector.svg Normal file
View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512"
height="512"
viewBox="0 0 512 512"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4.2 (2aeb623e1d, 2025-05-12)"
sodipodi:docname="vector.svg"
inkscape:export-filename="../254afa7f/raster.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="px"
inkscape:zoom="1.4142136"
inkscape:cx="313.2483"
inkscape:cy="291.68155"
inkscape:window-width="3440"
inkscape:window-height="1371"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1" /><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><path
style="fill:#ecc891;fill-opacity:1;stroke-width:1.16776"
d="m 222.19154,399.0475 0.43986,1.89206 1.60752,3.38161 6.12598,6.727 10.20652,4.60182 10.81077,1.82709 9.341,0.22611 14.13783,-2.96492 10.98115,-6.4368 4.9427,-10.80883 -1.20772,-15.04887 -9.5032,-18.99825 -8.89851,-11.62383 -7.8785,-5.31048 h -12.59159 l -8.84005,4.51085 -9.6954,12.56982 -9.71699,20.74007 z"
id="path16"
sodipodi:nodetypes="ccccccccccccccccccc" /><g
id="g4"
transform="matrix(1.1676266,0,0,1.1678831,-29.151974,-24.864933)"><path
style="fill:#f3b431"
d="m 214.21,362.142 -0.95,-0.849 -10.873,-3.699 -10.873,-3.699 -5.127,-3.335 -5.127,-3.334 -4.65,-4.868 -4.65,-4.867 -3.526,-5.587 -3.527,-5.587 -4.006,-9.413 -4.006,-9.413 -0.632,-2.5 -0.633,-2.5 -2.185,-2.644 -2.185,-2.644 -8.95,-5.741 -8.951,-5.741 -5.204,-5.204 -5.204,-5.205 -2.946,-5.91 -2.947,-5.911 -2.62,-7 -2.621,-7 -2.532,-9.5 -2.532,-9.5 -1.984,-10.237 -1.984,-10.237 -1.582,-12.763 -1.5816,-12.763 -0.0464,-18.5 -0.0464,-18.5 1.1624,-6.5 1.163,-6.5 2.057,-6.317 2.057,-6.317 3.646,-3.829 3.646,-3.829 4.445,-1.195 4.444,-1.195 5.241,0.655 5.24,0.655 7.815,3.798 7.815,3.798 6,4.571 6,4.571 8.611,8.817 8.61,8.817 6.411,8 6.411,8 4.629,6.5 4.628,6.5 4.888,8 4.888,8 7.444,13.307 7.443,13.308 5.019,6.664 5.018,6.665 3.398,2.278 3.398,2.278 h 2.902 2.902 l 2.7,-1.418 2.7,-1.417 3.607,-3.833 3.607,-3.832 2.999,-4.5 2.999,-4.5 10.302,-17.993 10.303,-17.994 4.063,-6.006 4.062,-6.007 4.99,-6.5 4.991,-6.5 7.896,-9.275 7.897,-9.275 7.282,-6.352 7.283,-6.351 4.63,-3.186 4.63,-3.185 6.73,-3.155 6.729,-3.156 7,0.025 7,0.025 3,1.597 3,1.598 2.137,2.345 2.137,2.345 2.032,4.05 2.031,4.049 1.664,7.951 1.664,7.95 0.554,13.5 0.554,13.5 -1.184,13.5 -1.185,13.5 -1.485,10 -1.484,10 -2.563,11.452 -2.563,11.452 -2.956,9.048 -2.956,9.048 -3.568,7.421 -3.568,7.421 -4.631,4.992 -4.63,4.993 -9.5,6.218 -9.5,6.218 -2.087,2.369 -2.086,2.368 -3.288,8.5 -3.288,8.5 -3.896,7.575 -3.895,7.574 -4.73,5.861 -4.73,5.86 -6.182,4.225 -6.183,4.225 -11.944,3.916 -11.945,3.917 -0.517,-6.443 -0.517,-6.443 -4.07,-8.134 -4.069,-8.133 -3.811,-4.977 -3.81,-4.976 -3.374,-2.274 -3.374,-2.273 h -5.392 -5.391 l -3.786,1.931 -3.785,1.931 -4.152,5.382 -4.152,5.381 -4.161,8.88 -4.161,8.879 -0.112,6.3 -0.112,6.3 -0.05,0.008 -0.05,0.008 -0.95,-0.849 m 11.35,-44.351 1.2,-1.2 -0.01,-2.55 -0.01,-2.55 -2.416,-5.191 -2.417,-5.19 -4.092,-2.964 -4.092,-2.964 -4.953,-1.189 -4.952,-1.188 -4.131,0.698 -4.131,0.698 -3.049,2.725 -3.05,2.724 0.677,2.696 0.676,2.695 3.539,3.917 3.538,3.916 4.186,1.531 4.187,1.531 7.932,1.043 7.932,1.042 3.436,-0.23 m 53.902,-1.673 6.203,-0.988 3.664,-1.739 3.664,-1.738 2.883,-3.981 2.884,-3.981 v -2.782 -2.782 l -3.25,-2.318 -3.25,-2.318 -6.5,0.034 -6.5,0.033 -3.5,1.831 -3.5,1.83 -2.841,2.636 -2.842,2.636 -1.773,3.5 -1.773,3.5 -0.668,3.682 -0.668,3.682 1.623,0.909 1.624,0.908 4.159,-0.783 4.159,-0.784 6.202,-0.987 m -111.966,-47.654 5.235,-2.349 3.765,-2.78 3.764,-2.78 3.047,-2.532 3.047,-2.532 2.943,-2 2.942,-2 3.883,-3.921 3.883,-3.921 1.378,-3.297 1.377,-3.297 v -4.997 -4.997 l -1.55,-4.785 -1.551,-4.785 -0.92,-2 -0.921,-2 -2.431,-6.608 -2.43,-6.608 -2.93,-5.892 -2.93,-5.892 -4.812,-8.5 -4.812,-8.5 -7.815,-11.5 -7.815,-11.5 -7.134,-7.763 -7.134,-7.763 -5.878,-4.523 -5.877,-4.522 -4.28,-1.943 -4.28,-1.942 -4.661,-0.022 -4.661,-0.022 -2.55,3.031 -2.551,3.031 -1.191,3.719 -1.192,3.719 -0.44,16 -0.44,16 1.149,11 1.148,11 2.401,13.5 2.4,13.5 1.469,6.638 1.468,6.639 2.177,7.361 2.178,7.362 3.309,7.197 3.308,7.197 4.808,5.14 4.808,5.14 2.858,1.478 2.858,1.478 4.174,0.847 4.173,0.846 4,-0.501 4,-0.501 m 183.477,-2.31 4.99,-2.528 4.142,-5.24 4.141,-5.239 2.957,-6.455 2.956,-6.454 3.311,-11.548 3.311,-11.547 1.7,-9.5 1.699,-9.5 1.308,-8.5 1.308,-8.5 1.248,-12.244 1.247,-12.243 -0.583,-11.757 -0.582,-11.756 -1.639,-5.37 -1.639,-5.37 -2.381,-2.38 -2.38,-2.38 -4.295,0.01 -4.296,0.01 -5.459,2.541 -5.459,2.541 -4.041,3.32 -4.041,3.32 -4.88,4.879 -4.88,4.879 -5.799,7.085 -5.799,7.084 -7.109,10.916 -7.11,10.915 -5.372,10.5 -5.372,10.5 -4.215,10.5 -4.214,10.5 -1.363,5 -1.363,5 0.01,3.5 0.01,3.5 1.827,4 1.827,4 4.401,4.027 4.401,4.026 8,6.055 8,6.055 4.647,2.703 4.647,2.703 4.353,0.906 4.353,0.906 4.244,-0.42 4.244,-0.421 4.989,-2.529"
id="path5"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /><path
style="fill:#302825"
d="m 38.669874,343.2406 v -205.5 c 0,-64.218747 38.539714,-102.749997 102.772576,-102.749998 h 205.54514 c 64.23285,10e-7 102.77257,38.531251 102.7726,102.749998 v 205.5 c 0,64.21875 -38.53971,102.75 -102.7726,102.75 H 141.44245 c -64.232862,0 -102.772576,-38.53125 -102.772576,-102.75 z m 215.644396,34.439 6.05408,-1.26932 4.70234,-2.75576 4.70234,-2.75575 4.85015,-9.57131 11.55776,-3.70496 11.55777,-3.70496 6.26074,-4.27833 6.26074,-4.27832 4.72973,-5.86039 4.72974,-5.86039 3.89579,-7.57475 3.89578,-7.57476 3.28767,-8.5 3.28767,-8.5 2.08681,-2.36823 2.08681,-2.36824 9.5,-6.21818 9.5,-6.21819 4.63022,-4.99269 4.63023,-4.99269 3.56838,-7.42089 3.56837,-7.42089 2.95592,-9.048 2.95592,-9.048 2.56263,-11.452 2.56263,-11.452 1.48484,-10 1.48484,-10 1.18444,-13.5 1.18444,-13.5 -0.55378,-13.5 -0.55379,-13.5 -1.66446,-7.9502 -1.66446,-7.95021 -2.03104,-4.04979 -2.03104,-4.0498 -2.13715,-2.34501 -2.13714,-2.34502 -3,-1.59754 -3,-1.59754 -7,-0.0247 -7,-0.0247 -6.72956,3.15517 -6.72956,3.15517 -4.63001,3.18554 -4.63002,3.18553 -7.28271,6.3516 -7.28271,6.35159 -7.89653,9.27498 -7.89653,9.27497 -4.9902,6.5 -4.99021,6.5 -4.06264,6.00673 -4.06265,6.00673 -10.3024,17.99327 -10.3024,17.99327 -2.99908,4.5 -2.99907,4.5 -3.60686,3.83242 -3.60686,3.83242 -2.70034,1.41758 -2.70034,1.41758 h -2.90178 -2.90178 l -3.39788,-2.27813 -3.39788,-2.27813 -5.0186,-6.66431 -5.01859,-6.66432 -7.4435,-13.30755 -7.44349,-13.30756 -4.88782,-8 -4.88782,-8 -4.62853,-6.5 -4.62852,-6.5 -6.41106,-8 -6.41107,-8 -8.6105,-8.81716 -8.6105,-8.81717 -6,-4.57056 -6,-4.57056 -7.81514,-3.79846 -7.81513,-3.79845 -5.24036,-0.65474 -5.24035,-0.65474 -4.44451,1.19482 -4.44451,1.19482 -3.64616,3.82904 -3.64615,3.82905 -2.05676,6.31705 -2.05675,6.31706 -1.1629,6.5 -1.162903,6.5 0.04643,18.5 0.04643,18.5 1.581683,12.76302 1.58168,12.76302 1.98409,10.23698 1.98408,10.23698 2.53212,9.5 2.53212,9.5 2.62048,7 2.62048,7 2.94656,5.91077 2.94656,5.91077 5.20407,5.20407 5.20407,5.20408 8.95038,5.74141 8.95038,5.74141 2.18498,2.64375 2.18499,2.64374 0.63266,2.5 0.63266,2.5 4.006,9.41317 4.00601,9.41317 3.52645,5.58683 3.52645,5.58683 4.6499,4.86738 4.6499,4.86738 5.14188,3.34419 5.14189,3.34419 11.68957,3.89294 10.02667,3.48665 2.00001,1.68169 0.37671,1.62008 1.37674,2.8955 2.62326,2.88 2.62327,2.88 4.37062,1.97016 4.37063,1.97015 4.62937,0.78223 4.62938,0.78222 4,0.0968 4,0.0968 z"
id="path4"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /></g><path
style="fill:#191104;fill-opacity:1;stroke-width:1.16776"
d="m 241.54011,399.64959 3.09336,5.58232 5.58117,3.09411 13.60733,0.0826 6.82614,-6.82761 v -8.14723 l -7.07452,-5.95411 -7.73281,-1.451 -9.58761,2.58224 -4.79572,6.09812 z"
id="path23" /><path
style="fill:#f0d09a;fill-opacity:1;stroke-width:1.16776"
d="m 400.8078,244.96043 3.86601,-13.48555 5.49603,-32.11678 2.98445,-24.22656 1.45602,-14.2984 -1.36028,-27.46043 -3.82748,-12.54307 -5.55907,-5.55912 -10.03107,0.0234 -12.74815,5.93519 -9.43676,7.75474 -11.39604,11.3962 -13.54213,16.54774 -16.60248,25.49606 -12.54497,24.52553 -9.84193,24.52554 -3.18295,11.67884 0.0233,8.17518 4.2665,9.34308 10.27746,9.40496 18.68202,14.14306 10.85193,6.31358 10.16535,2.11618 9.91082,-0.98218 c 0,0 11.65175,-5.90598 11.65175,-5.90598 l 9.67143,-12.23824 6.90419,-15.07621 z"
id="path25" /><path
style="fill:#f0d09a;fill-opacity:1;stroke-width:1.16776"
d="m 188.43989,273.51869 6.87148,-4.67155 9.06779,-9.15853 3.21681,-7.70103 v -11.67182 l -3.62081,-11.17664 -2.1496,-4.67154 -5.67583,-15.43473 -6.84229,-13.76233 -11.23723,-19.85402 -18.25001,-26.86131 -16.6597,-18.13255 -13.72545,-10.56351 -9.99488,-4.53723 -10.88461,-0.0514 -5.95606,7.07972 -2.782458,8.68671 -1.02751,37.37225 2.682038,25.69344 5.60578,31.53283 3.42931,15.50598 5.08502,17.19474 7.72617,16.81052 11.22789,12.00583 6.67417,3.45227 9.74619,1.97723 9.341,-1.17023 12.22621,-5.48554 8.79107,-6.49343 z"
id="path26" /><path
style="fill:#191104;fill-opacity:1;stroke-width:1.16776"
d="m 234.21786,346.27779 1.40115,-1.40146 -0.0233,-5.9562 -5.64314,-12.12379 -9.55586,-6.92321 -11.56534,-2.77606 -9.64692,1.63037 -7.12136,6.36378 1.5798,6.29607 8.26329,9.14803 9.77652,3.57605 18.52325,2.43504 z"
id="path27" /><path
style="fill:#191104;fill-opacity:1;stroke-width:1.16776"
d="m 276.41005,345.18466 3.79128,2.12204 24.19672,-4.13664 8.55636,-4.06072 6.73371,-9.2987 v -6.49809 l -7.58957,-5.4143 -15.17913,0.0783 -8.17341,4.27562 -6.63561,6.15708 -4.14041,8.17519 z"
id="path28" /></g></svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -21,7 +21,7 @@
Help()
{
echo "Bash script for building fennec from source."
echo "Bash script for running the fennec test suite. By default, the build script executes in debug mode."
echo
echo "GNU long options:"
echo "--help (-h) = Print this help info."
@ -87,7 +87,7 @@ All()
# Main Program =========================================================================================================
if [[ $# -eq 0 ]] ; then
All
Debug
exit 0
fi