summaryrefslogtreecommitdiffstats
path: root/longbow/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'longbow/README.md')
-rw-r--r--longbow/README.md112
1 files changed, 112 insertions, 0 deletions
diff --git a/longbow/README.md b/longbow/README.md
new file mode 100644
index 00000000..66c75d1e
--- /dev/null
+++ b/longbow/README.md
@@ -0,0 +1,112 @@
+LongBow
+=======
+_The Best Defense is a Good Offense_
+
+The LongBow C language software framework
+
+## Quick Start ##
+```
+$ git clone -b cframework/master https://gerrit.fd.io/r/cicn cframework
+$ cd cframework/longbow
+$ mkdir build
+$ cd build
+$ cmake ..
+$ make
+$ make test
+$ make install
+```
+
+## Introduction ##
+
+LongBow is a C language software framework that combines the fail-fast philosophy of an offensive-stance of program
+development and xUnit style unit testing. Using LongBow's to aid an offensive-development stance is largely a matter
+of using its entry and exit assertions in your code. Similarly using LongBow's unit-test framework uses the same entry
+and exit assertions in the unit test cases themselves. The runtime assertions and the unit-test assertions work
+together in the unit test framework and do not conflict. This framework grew out of the need for a unit testing for
+Test Driven Development on the CCNx Distillery software distribution.
+Two other test frameworks were considered and used to develop unit tests: Unity and GoogleTest. Ultimately Unity
+was not used (although this framework is indebted to Unity for inspiration) mainly due to ease-of-use problems,
+and Googletest was not used mainly because it is a C++ framework, is not compatible with some features of C99, and is
+difficult to use.
+
+## Using LongBow ##
+
+### Platforms ###
+
+LongBow has been tested in:
+
+- Ubuntu 16.04 (x86_64)
+- Debian Testing
+- MacOSX 10.12
+
+Other platforms and architectures may work.
+
+### Dependencies ###
+
+- c99 (clang / gcc)
+- CMake 3.4
+- Python 2.7
+
+While the LongBow unit test framework and runtime assertions don't have any unusual requirements other than CMake,
+the software quality development tools that LongBow provides can make use of the following tools:
+
+- Doxygen
+- Uncrustify
+
+### Using LongBow ###
+
+#### LongBow Lib
+
+To use LongBow in your software you will need to link your programs to the LongBow libraries.
+Longbow comes as a set of libraries. A main library and a set of reporting libraries. Your software will need to
+link to the main library (`liblongbow`) and one of the reporting libraries. Currently there are 2 reporting libraries
+available `longbow-textplain` and `longbow-ansiterm`.
+
+```
+LONGBOW_DIR=<directory-where-longbow-is-installed>
+
+-I${LONGBOW_DIR}/include -L${LONGBOW_DIR}/lib -llongbow -llongbow_textplain.a
+```
+
+#### LongBow Unit Testing
+
+LongBow unit testing works in conjuction with the LongBow library. Please take a look at the examples and the
+documentation for information on how to write unit tests. You can also look at some of the software that uses LongBow
+for unit testing as examples. A good starting point would be Libparc.
+
+#### LongBow Utilities
+
+LongBow comes with a set of utilities (scripts) to make C programs better. This includes code analysis and reporting
+tools. You will find these in the `${INSTALL_DIR}/bin` directory. Each of those utilities should come with a `-h`
+option that will give you online help. For more information please check the LongBow documentation.
+
+### GDB and LongBow ###
+LongBow uses signals to interrupt program flow when an assertion fails.
+When using `gdb` this will cause `gdb` to stop running of the test which probably isn't what you want.
+You probably would prefer that gdb just ignore the signal and let the LongBow unit test signal handler take care of the
+signal. To do this, you must configure `gdb` to ignore the signal and to allow it to pass to the programme being
+executed.
+
+`handle 6 nostop pass`
+
+
+### License ###
+
+This software is distributed under the following license:
+
+```
+Copyright (c) 2017 Cisco and/or its affiliates.
+Licensed 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.
+```
+
+