From aea8580ecf448bc9d783181996139cae60ce44c9 Mon Sep 17 00:00:00 2001 From: Carlos O'Ryan Date: Sun, 3 Dec 2017 14:07:35 -0500 Subject: [PATCH 1/3] Run autoconf from top-level directory. This is part (hopefully all) of the fixes for #776. The top-level configure.ac configures googletest first and then googlemock. With this changes it is possible to embed googletest into another project that uses autoconf. For an example (though it is WIP), see the commits (and soon PR) referenced from google/protobuf#236. --- .gitignore | 16 ++++++++ Makefile.am | 14 +++++++ configure.ac | 16 ++++++++ googlemock/configure.ac | 2 +- googletest/Makefile.am | 89 +++++++++++++++++++++++++++-------------- 5 files changed, 106 insertions(+), 31 deletions(-) create mode 100644 Makefile.am create mode 100644 configure.ac diff --git a/.gitignore b/.gitignore index 4cea432f..b294d3b6 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,19 @@ Win32-Debug/ Win32-Release/ x64-Debug/ x64-Release/ + +# Ignore autoconf / automake files +Makefile.in +aclocal.m4 +configure +build-aux/ +autom4te.cache/ +googletest/m4/libtool.m4 +googletest/m4/ltoptions.m4 +googletest/m4/ltsugar.m4 +googletest/m4/ltversion.m4 +googletest/m4/lt~obsolete.m4 + +# Ignore generated directories. +googlemock/fused-src/ +googletest/fused-src/ diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..433eefeb --- /dev/null +++ b/Makefile.am @@ -0,0 +1,14 @@ +## Process this file with automake to produce Makefile.in +ACLOCAL_AMFLAGS = -I m4 + +AUTOMAKE_OPTIONS = foreign + +# Build . before src so that our all-local and clean-local hooks kicks in at +# the right time. +SUBDIRS = googletest googlemock + +EXTRA_DIST = \ + BUILD.bazel \ + CMakeLists.txt \ + README.md \ + WORKSPACE diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..751b9ba8 --- /dev/null +++ b/configure.ac @@ -0,0 +1,16 @@ +AC_INIT([Google C++ Mocking and Testing Frameworks], + [1.8.0], + [googlemock@googlegroups.com], + [googletest]) + +# Provide various options to initialize the Autoconf and configure processes. +AC_PREREQ([2.59]) +AC_CONFIG_SRCDIR([./README.md]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_SUBDIRS([googletest googlemock]) + +AM_INIT_AUTOMAKE + +# Output the generated files. No further autoconf macros may be used. +AC_OUTPUT diff --git a/googlemock/configure.ac b/googlemock/configure.ac index c23ed455..cb5e1a6a 100644 --- a/googlemock/configure.ac +++ b/googlemock/configure.ac @@ -129,7 +129,7 @@ AS_IF([test "x${HAVE_BUILT_GTEST}" = "xyes"], GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` GTEST_LIBS=`${GTEST_CONFIG} --libs` GTEST_VERSION=`${GTEST_CONFIG} --version`], - [AC_CONFIG_SUBDIRS([../googletest]) + [ # GTEST_CONFIG needs to be executable both in a Makefile environment and # in a shell script environment, so resolve an absolute path for it here. GTEST_CONFIG="`pwd -P`/../googletest/scripts/gtest-config" diff --git a/googletest/Makefile.am b/googletest/Makefile.am index dbc004de..b6c7232d 100644 --- a/googletest/Makefile.am +++ b/googletest/Makefile.am @@ -34,6 +34,7 @@ EXTRA_DIST += $(GTEST_SRC) # Sample files that we don't compile. EXTRA_DIST += \ samples/prime_tables.h \ + samples/sample1_unittest.cc \ samples/sample2_unittest.cc \ samples/sample3_unittest.cc \ samples/sample4_unittest.cc \ @@ -120,16 +121,16 @@ EXTRA_DIST += \ # MSVC project files EXTRA_DIST += \ - msvc/gtest-md.sln \ - msvc/gtest-md.vcproj \ - msvc/gtest.sln \ - msvc/gtest.vcproj \ - msvc/gtest_main-md.vcproj \ - msvc/gtest_main.vcproj \ - msvc/gtest_prod_test-md.vcproj \ - msvc/gtest_prod_test.vcproj \ - msvc/gtest_unittest-md.vcproj \ - msvc/gtest_unittest.vcproj + msvc/2010/gtest-md.sln \ + msvc/2010/gtest-md.vcxproj \ + msvc/2010/gtest.sln \ + msvc/2010/gtest.vcxproj \ + msvc/2010/gtest_main-md.vcxproj \ + msvc/2010/gtest_main.vcxproj \ + msvc/2010/gtest_prod_test-md.vcxproj \ + msvc/2010/gtest_prod_test.vcxproj \ + msvc/2010/gtest_unittest-md.vcxproj \ + msvc/2010/gtest_unittest.vcxproj # xcode project files EXTRA_DIST += \ @@ -223,33 +224,61 @@ lib_libgtest_main_la_LIBADD = lib/libgtest.la # TESTS -- Programs run automatically by "make check" # check_PROGRAMS -- Programs built by "make check" but not necessarily run -noinst_LTLIBRARIES = samples/libsamples.la - -samples_libsamples_la_SOURCES = \ - samples/sample1.cc \ - samples/sample1.h \ - samples/sample2.cc \ - samples/sample2.h \ - samples/sample3-inl.h \ - samples/sample4.cc \ - samples/sample4.h - TESTS= TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \ GTEST_BUILD_DIR="$(top_builddir)/test" check_PROGRAMS= # A simple sample on using gtest. -TESTS += samples/sample1_unittest -check_PROGRAMS += samples/sample1_unittest -samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc -samples_sample1_unittest_LDADD = lib/libgtest_main.la \ - lib/libgtest.la \ - samples/libsamples.la +TESTS += samples/sample1_unittest \ + samples/sample2_unittest \ + samples/sample3_unittest \ + samples/sample4_unittest \ + samples/sample5_unittest \ + samples/sample6_unittest \ + samples/sample7_unittest \ + samples/sample8_unittest \ + samples/sample9_unittest \ + samples/sample10_unittest +check_PROGRAMS += samples/sample1_unittest \ + samples/sample2_unittest \ + samples/sample3_unittest \ + samples/sample4_unittest \ + samples/sample5_unittest \ + samples/sample6_unittest \ + samples/sample7_unittest \ + samples/sample8_unittest \ + samples/sample9_unittest \ + samples/sample10_unittest -# Another sample. It also verifies that libgtest works. -TESTS += samples/sample10_unittest -check_PROGRAMS += samples/sample10_unittest +samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc samples/sample1.cc +samples_sample1_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la +samples_sample2_unittest_SOURCES = samples/sample2_unittest.cc samples/sample2.cc +samples_sample2_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la +samples_sample3_unittest_SOURCES = samples/sample3_unittest.cc +samples_sample3_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la +samples_sample4_unittest_SOURCES = samples/sample4_unittest.cc samples/sample4.cc +samples_sample4_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la +samples_sample5_unittest_SOURCES = samples/sample5_unittest.cc samples/sample1.cc +samples_sample5_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la +samples_sample6_unittest_SOURCES = samples/sample6_unittest.cc +samples_sample6_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la +samples_sample7_unittest_SOURCES = samples/sample7_unittest.cc +samples_sample7_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la +samples_sample8_unittest_SOURCES = samples/sample8_unittest.cc +samples_sample8_unittest_LDADD = lib/libgtest_main.la \ + lib/libgtest.la + +# Also verify that libgtest works by itself. +samples_sample9_unittest_SOURCES = samples/sample9_unittest.cc +samples_sample9_unittest_LDADD = lib/libgtest.la samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc samples_sample10_unittest_LDADD = lib/libgtest.la From 75b85d5382958cb719736c0b82863c7148be2526 Mon Sep 17 00:00:00 2001 From: Carlos O'Ryan Date: Sun, 24 Dec 2017 10:34:56 -0500 Subject: [PATCH 2/3] Create a autotools-based build for Travis. When this build works, we know the autoconf support is working. --- .travis.yml | 5 ++-- ci/build-linux-autotools.sh | 46 +++++++++++++++++++++++++++++++++++ ci/get-nprocessors.sh | 48 +++++++++++++++++++++++++++++++++++++ ci/travis.sh | 2 ++ 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100755 ci/build-linux-autotools.sh create mode 100755 ci/get-nprocessors.sh diff --git a/.travis.yml b/.travis.yml index 4afad4ae..95f8dff1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,10 +24,11 @@ matrix: script: ./ci/build-linux-bazel.sh - os: linux compiler: gcc - env: BUILD_TYPE=Debug VERBOSE=1 + install: ./ci/install-linux.sh && ./ci/log-config.sh + script: ./ci/build-linux-autotools.sh - os: linux compiler: gcc - env: BUILD_TYPE=Release VERBOSE=1 CXX_FLAGS=-std=c++11 + env: BUILD_TYPE=Debug VERBOSE=1 CXX_FLAGS=-std=c++11 - os: linux compiler: clang env: BUILD_TYPE=Debug VERBOSE=1 diff --git a/ci/build-linux-autotools.sh b/ci/build-linux-autotools.sh new file mode 100755 index 00000000..aa92a322 --- /dev/null +++ b/ci/build-linux-autotools.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# Copyright 2017 Google Inc. +# All Rights Reserved. +# +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -e + +. ci/get-nprocessors.sh + +cd googlemock + +# Create the configuration script +autoreconf -i + +# Run in a subdirectory to keep the sources clean +mkdir build || true +cd build +../configure + +make -j ${NPROCESSORS:-2} diff --git a/ci/get-nprocessors.sh b/ci/get-nprocessors.sh new file mode 100755 index 00000000..43635e76 --- /dev/null +++ b/ci/get-nprocessors.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Copyright 2017 Google Inc. +# All Rights Reserved. +# +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This file is typically sourced by another script. +# if possible, ask for the precise number of processors, +# otherwise take 2 processors as reasonable default; see +# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization +if [ -x /usr/bin/getconf ]; then + NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN) +else + NPROCESSORS=2 +fi + +# as of 2017-09-04 Travis CI reports 32 processors, but GCC build +# crashes if parallelized too much (maybe memory consumption problem), +# so limit to 4 processors for the time being. +if [ $NPROCESSORS -gt 4 ] ; then + echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4." + NPROCESSORS=4 +fi diff --git a/ci/travis.sh b/ci/travis.sh index 24a557e9..2dda68fd 100755 --- a/ci/travis.sh +++ b/ci/travis.sh @@ -1,6 +1,8 @@ #!/usr/bin/env sh set -evx +. ci/get-nprocessors.sh + # if possible, ask for the precise number of processors, # otherwise take 2 processors as reasonable default; see # https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization From ec2b0c391261497048940c2fa4b19dcddf66b9ea Mon Sep 17 00:00:00 2001 From: Carlos O'Ryan Date: Sun, 24 Dec 2017 12:22:46 -0500 Subject: [PATCH 3/3] Build both googletest and googlemock. --- ci/build-linux-autotools.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/ci/build-linux-autotools.sh b/ci/build-linux-autotools.sh index aa92a322..cc404e9b 100755 --- a/ci/build-linux-autotools.sh +++ b/ci/build-linux-autotools.sh @@ -33,8 +33,6 @@ set -e . ci/get-nprocessors.sh -cd googlemock - # Create the configuration script autoreconf -i