Initial Project Files
This adds the initial autotools scripts and some placeholder c++ files
so that the builder is happy.
Tested:
Built and run through the unit test script.
Change-Id: Ie7e7e062726761aad54b77e1c55fcb1ba91afd49
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..9109e65
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,85 @@
+---
+Language: Cpp
+# BasedOnStyle: LLVM
+AccessModifierOffset: -2
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: false
+AlignOperands: true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: None
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: true
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+ AfterClass: true
+ AfterControlStatement: true
+ AfterEnum: true
+ AfterFunction: true
+ AfterNamespace: true
+ AfterObjCDeclaration: true
+ AfterStruct: true
+ AfterUnion: true
+ BeforeCatch: true
+ BeforeElse: true
+ IndentBraces: false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Custom
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializers: AfterColon
+ColumnLimit: 80
+CommentPragmas: '^ IWYU pragma:'
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: false
+PointerAlignment: Left
+DisableFormat: false
+ExperimentalAutoDetectBinPacking: false
+FixNamespaceComments: true
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IndentCaseLabels: true
+IndentWidth: 4
+IndentWrappedFunctionNames: true
+KeepEmptyLinesAtTheStartOfBlocks: true
+MacroBlockBegin: ''
+MacroBlockEnd: ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+ReflowComments: true
+SortIncludes: true
+SortUsingDeclarations: true
+SpaceAfterCStyleCast: false
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles: false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard: Cpp11
+TabWidth: 4
+UseTab: Never
+...
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7d1eea5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,44 @@
+# Test suite logs
+*.log
+
+# Code Coverage
+*.gcda
+*.gcno
+*.trs
+*-coverage*
+
+# CC / CXX Compiler
+*.ii
+*.i
+*.o
+*.s
+
+# Libtool
+*.la
+*.lo
+
+# Autotools
+.deps
+.dirstamp
+.libs
+/aclocal.m4
+/autom4te.cache
+/build-aux
+/confdefs.h
+/config.h
+/config.h.in
+/config.h.in~
+/config.log
+/config.status
+/configure
+/m4
+/libtool
+Makefile
+Makefile.in
+/stamp-h1
+
+# Custom generated files
+/src/stdplus.pc
+
+# Output binaries
+/test/placeholder
diff --git a/.lcovrc b/.lcovrc
new file mode 100644
index 0000000..360a8b4
--- /dev/null
+++ b/.lcovrc
@@ -0,0 +1,3 @@
+geninfo_gcov_all_blocks = 1
+lcov_function_coverage = 1
+lcov_branch_coverage = 0
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000..3934d40
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,45 @@
+How to use this list:
+ Find the most specific section entry (described below) that matches where
+ your change lives and add the reviewers (R) and maintainers (M) as
+ reviewers. You can use the same method to track down who knows a particular
+ code base best.
+
+ Your change/query may span multiple entries; that is okay.
+
+ If you do not find an entry that describes your request at all, someone
+ forgot to update this list; please at least file an issue or send an email
+ to a maintainer, but preferably you should just update this document.
+
+Description of section entries:
+
+ Section entries are structured according to the following scheme:
+
+ X: NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>
+ X: ...
+ .
+ .
+ .
+
+ Where REPO_NAME is the name of the repository within the OpenBMC GitHub
+ organization; FILE_PATH is a file path within the repository, possibly with
+ wildcards; X is a tag of one of the following types:
+
+ M: Denotes maintainer; has fields NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>;
+ if omitted from an entry, assume one of the maintainers from the
+ MAINTAINERS entry.
+ R: Denotes reviewer; has fields NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>;
+ these people are to be added as reviewers for a change matching the repo
+ path.
+ F: Denotes forked from an external repository; has fields URL.
+
+ Line comments are to be denoted "# SOME COMMENT" (typical shell style
+ comment); it is important to follow the correct syntax and semantics as we
+ may want to use automated tools with this file in the future.
+
+ A change cannot be added to an OpenBMC repository without a MAINTAINER's
+ approval; thus, a MAINTAINER should always be listed as a reviewer.
+
+START OF MAINTAINERS LIST
+-------------------------
+
+M: William A. Kenngton III <wak@google.com> <wak-work!>
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..4493eea
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,39 @@
+ACLOCAL_AMFLAGS = -I m4
+
+# Ignore system headers
+CODE_COVERAGE_IGNORE_PATTERN = '/include/*' '/usr/include/*' '$(includedir)/*'
+export CODE_COVERAGE_IGNORE_PATTERN
+
+CODE_COVERAGE_LCOV_SHOPTS = $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_SHOPTS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_SHOPTS
+
+CODE_COVERAGE_LCOV_OPTIONS = $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_OPTIONS
+
+CODE_COVERAGE_LCOV_RMOPTS = $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_RMOPTS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_RMOPTS
+
+CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+# Use our configuration file for genhtml
+CODE_COVERAGE_GENHTML_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
+# Don't generate the absolute path for each file in the HTML output
+CODE_COVERAGE_GENHTML_OPTIONS += --prefix $(abs_srcdir) --prefix $(abs_builddir)
+export CODE_COVERAGE_GENHTML_OPTIONS
+
+export AM_CPPFLAGS = -I$(abs_builddir)/src -I$(abs_srcdir)/src \
+ $(CODE_COVERAGE_CPPFLAGS)
+export AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
+export AM_CXXFLAGS = $(CODE_COVERAGE_CXXFLAGS)
+
+export COMMON_LIBS = $(CODE_COVERAGE_LIBS)
+export STDPLUS_LIBS = $(abs_builddir)/src/libstdplus.la $(COMMON_LIBS)
+
+
+EXTRA_DIST = LICENSE MAINTAINERS README.md
+SUBDIRS = src example test
diff --git a/README.md b/README.md
index 1f9c3f4..e00530a 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,27 @@
-# stdplus
\ No newline at end of file
+# stdplus
+
+stdplus is a c++ project containing commonly used classes and functions
+for the Linux platform.
+
+## Dependencies
+
+Test cases require google{test,mock}, valgrind, and lcov.
+
+## Building
+For a standard release build, you want something like:
+```
+./bootstrap.sh
+./configure --disable-examples --disable-tests
+make
+make install
+```
+
+For a test / debug build, a typical configuration is
+```
+./bootstrap.sh
+./configure --enable-tests --enable-coverage --enable-valgrind
+make
+make check
+make check-valgrind
+make check-code-coverage
+```
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 0000000..30ef75a
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -e
+set -x
+autoreconf -v -f -i
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..3837116
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,141 @@
+# Initialization
+AC_PREREQ([2.69])
+AC_INIT([stdplus], [0.1], [https://github.com/openbmc/stdplus/issues])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIRS([m4])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([nostdinc foreign subdir-objects -Wall -Werror dist-xz tar-ustar])
+AM_SILENT_RULES([yes])
+AC_LANG([C++])
+
+# Make sure the default CFLAGS of `-O2 -g` don't override CODE_COVERAGE_CFLAGS
+# It is important that this comes before AC_PROG_C{C,XX}, as we are attempting
+# to stop them from populating default CFLAGS and CXXFLAGS.
+AS_IF([test "x$enable_tests" = "xno"], [enable_code_coverage=no])
+AS_IF([test "x$enable_code_coverage" != "xno"], [
+ AS_IF([test "x${CXXFLAGS+set}" != "xset"], [
+ AC_SUBST(CXXFLAGS, [""])
+ ])
+ AS_IF([test "x${CFLAGS+set}" != "xset"], [
+ AC_SUBST(CFLAGS, [""])
+ ])
+])
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+
+# Checks for libtool
+LT_INIT # Removes 'unrecognized options: --with-libtool-sysroot'
+
+# Make sure the pkgconfigdata is configured for automake
+PKG_INSTALLDIR
+
+# Checks for typedefs, structures, and compiler characteristics.
+AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory])
+AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wpedantic], [CFLAGS])
+AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wpedantic], [CXXFLAGS])
+
+# Make it possible for users to choose to disable examples
+AC_ARG_ENABLE([examples], AC_HELP_STRING([--disable-examples],
+ [Build example programs]))
+AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$enable_examples" != "xno"])
+
+# Make it possible for users to choose if they want test support
+# explicitly or not at all
+AC_ARG_ENABLE([tests], AC_HELP_STRING([--disable-tests],
+ [Build test cases]))
+
+# Check/set gtest specific functions.
+AS_IF([test "x$enable_tests" != "xno"], [
+ PKG_CHECK_MODULES([GTEST], [gtest], [], [true])
+ PKG_CHECK_MODULES([GMOCK], [gmock], [], [true])
+ AX_PTHREAD
+
+ AX_SAVE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])
+ AX_APPEND_COMPILE_FLAGS([$GTEST_CFLAGS], [CPPFLAGS])
+ AC_CHECK_HEADERS([gtest/gtest.h], [
+ AS_IF([test "x$GTEST_CFLAGS" = "x"], [
+ AS_IF([test "x$PTHREAD_CFLAGS" = "x"], [
+ AX_APPEND_COMPILE_FLAGS(["-DGTEST_HAS_PTHREAD=0"], [GTEST_CFLAGS])
+ ], [
+ AX_APPEND_COMPILE_FLAGS(["-DGTEST_HAS_PTHREAD=1"], [GTEST_CFLAGS])
+ AX_APPEND_COMPILE_FLAGS([$PTHREAD_CFLAGS], [GTEST_CFLAGS])
+ ])
+ ])
+ ], [
+ AS_IF([test "x$enable_tests" = "xyes"], [
+ AC_MSG_ERROR([Testing enabled but could not find gtest/gtest.h])
+ ])
+ ])
+ AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])
+
+ AX_SAVE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])
+ AX_APPEND_COMPILE_FLAGS([$GMOCK_CFLAGS], [CPPFLAGS])
+ AC_CHECK_HEADERS([gmock/gmock.h], [], [
+ AS_IF([test "x$enable_tests" = "xyes"], [
+ AC_MSG_ERROR([Testing enabled but could not find gmock/gmock.h])
+ ])
+ ])
+ AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])
+
+ AX_SAVE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
+ AX_APPEND_COMPILE_FLAGS([$GTEST_LIBS], [LDFLAGS])
+ AC_CHECK_LIB([gtest], [main], [
+ AS_IF([test "x$GTEST_LIBS" = "x"], [
+ AX_APPEND_COMPILE_FLAGS([-lgtest], [GTEST_LIBS])
+ ])
+ ], [
+ AS_IF([test "x$enable_tests" = "xyes"], [
+ AC_MSG_ERROR([Testing enabled but couldn't find gtest libs])
+ ])
+ ])
+ AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
+
+ AX_SAVE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
+ AX_APPEND_COMPILE_FLAGS([$GMOCK_LIBS], [LDFLAGS])
+ AC_CHECK_LIB([gmock], [main], [
+ AS_IF([test "x$GMOCK_LIBS" = "x"], [
+ AX_APPEND_COMPILE_FLAGS([-lgmock], [GMOCK_LIBS])
+ ])
+ ], [
+ AS_IF([test "x$enable_tests" = "xyes"], [
+ AC_MSG_ERROR([Testing enabled but couldn't find gmock libs])
+ ])
+ ])
+ AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
+])
+
+# Check for valgrind
+AS_IF([test "x$enable_tests" = "xno"], [enable_valgrind=no])
+m4_foreach([vgtool], [valgrind_tool_list],
+ [AX_VALGRIND_DFLT(vgtool, [off])])
+AX_VALGRIND_DFLT([memcheck], [on])
+AX_VALGRIND_CHECK
+AM_EXTRA_RECURSIVE_TARGETS([check-valgrind])
+m4_foreach([vgtool], [valgrind_tool_list],
+ [AM_EXTRA_RECURSIVE_TARGETS([check-valgrind-]vgtool)])
+
+# Code coverage
+AX_CODE_COVERAGE
+AM_EXTRA_RECURSIVE_TARGETS([check-code-coverage])
+AS_IF([test "x$CODE_COVERAGE_ENABLED" = "xyes"], [
+ AX_APPEND_COMPILE_FLAGS([-DHAVE_GCOV], [CODE_COVERAGE_CPPFLAGS])
+])
+
+# Append -Werror after doing autoconf compiler checks
+# Otherwise some perfectly valid checks can fail and cause our
+# final configuratin to be broken.
+AC_ARG_ENABLE([werror], AC_HELP_STRING([--disable-werror], [Whether to automatically add -Werror CFLAGS]))
+AS_IF([test "x$enable_tests" != "xno"], [
+ AX_APPEND_COMPILE_FLAGS([-Werror], [CFLAGS])
+ AX_APPEND_COMPILE_FLAGS([-Werror], [CXXFLAGS])
+])
+
+# Create configured output
+AC_CONFIG_FILES([Makefile example/Makefile src/Makefile test/Makefile])
+AC_CONFIG_FILES([src/stdplus.pc])
+AC_OUTPUT
diff --git a/example/Makefile.am b/example/Makefile.am
new file mode 100644
index 0000000..2e8857a
--- /dev/null
+++ b/example/Makefile.am
@@ -0,0 +1,5 @@
+noinst_PROGRAMS =
+
+if BUILD_EXAMPLES
+
+endif
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..de5de8d
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,8 @@
+nobase_include_HEADERS =
+pkgconfig_DATA = stdplus.pc
+lib_LTLIBRARIES = libstdplus.la
+libstdplus_la_SOURCES =
+libstdplus_la_LIBADD = $(COMMON_LIBS)
+
+nobase_include_HEADERS += stdplus/placeholder.hpp
+libstdplus_la_SOURCES += stdplus/placeholder.cpp
diff --git a/src/stdplus.pc.in b/src/stdplus.pc.in
new file mode 100644
index 0000000..b79e7ca
--- /dev/null
+++ b/src/stdplus.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: stdplus
+Description: Commonly used c++ classes and functions
+Version: @VERSION@
+Cflags: -I${includedir}
+Libs: -L${libdir} -lstdplus
diff --git a/src/stdplus/placeholder.cpp b/src/stdplus/placeholder.cpp
new file mode 100644
index 0000000..a4c9e2b
--- /dev/null
+++ b/src/stdplus/placeholder.cpp
@@ -0,0 +1 @@
+#include <stdplus/placeholder.hpp>
diff --git a/src/stdplus/placeholder.hpp b/src/stdplus/placeholder.hpp
new file mode 100644
index 0000000..6f70f09
--- /dev/null
+++ b/src/stdplus/placeholder.hpp
@@ -0,0 +1 @@
+#pragma once
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..c67e07a
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,13 @@
+@VALGRIND_CHECK_RULES@
+@CODE_COVERAGE_RULES@
+
+gtest_cppflags = $(AM_CPPFLAGS) $(GTEST_CFLAGS) $(GMOCK_CFLAGS)
+gtest_ldadd = $(STDPLUS_LIBS) $(GTEST_LIBS) $(GMOCK_LIBS) -lgmock_main
+
+check_PROGRAMS =
+TESTS = $(check_PROGRAMS)
+
+check_PROGRAMS += placeholder
+placeholder_SOURCES = placeholder.cpp
+placeholder_CPPFLAGS = $(gtest_cppflags)
+placeholder_LDADD = $(gtest_ldadd)
diff --git a/test/placeholder.cpp b/test/placeholder.cpp
new file mode 100644
index 0000000..782277f
--- /dev/null
+++ b/test/placeholder.cpp
@@ -0,0 +1,5 @@
+#include <gtest/gtest.h>
+
+TEST(PlaceholderTest, None)
+{
+}