Skip to content

Commit

Permalink
Export of internal Abseil changes.
Browse files Browse the repository at this point in the history
--
bdce7e57e9e886eff1114d0266781b443f7ec639 by Derek Mauro <dmauro@google.com>:

Change {Get|Set}EnvironmentVariable to {Get|Set}EnvironmentVariableA for
compatibility with /DUNICODE.

PiperOrigin-RevId: 239229514

--
2276ed502326a044a84060d34eb19d499e3a3be2 by Derek Mauro <dmauro@google.com>:

Import of CCTZ from GitHub.

PiperOrigin-RevId: 239228622

--
a462efb970ff43b08a362ef2343fb75ac1295a50 by Derek Mauro <dmauro@google.com>:

Adding linking of CoreFoundation to CMakeLists in absl/time.
Import #280.

Fix #283

PiperOrigin-RevId: 239220785

--
fc23327b97f940c682aae1956cf7a1bf87f88c06 by Derek Mauro <dmauro@google.com>:

Add hermetic test script that uses Docker to build with a very recent
version of gcc (8.3.0 today) with libstdc++ and bazel.

PiperOrigin-RevId: 239220448

--
418c08a8f6a53e63b84e39473035774417ca3aa7 by Derek Mauro <dmauro@google.com>:

Disable part of the variant exeception safety test on move assignment
when using versions of libstd++ that contain a bug.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87431#c7

PiperOrigin-RevId: 239062455

--
799722217aeda79679577843c91d5be62cbcbb42 by Matt Calabrese <calabrese@google.com>:

Add internal-only IsSwappable traits corresponding to std::is_swappable and std::is_nothrow_swappable, which are used with the swap implementations of optional and variant.

PiperOrigin-RevId: 239049448

--
aa46a036038a3de5c68ac5e5d3b4bf76f818d2ea by CJ Johnson <johnsoncj@google.com>:

Make InlinedVectorStorage constructor explicit

PiperOrigin-RevId: 239044361

--
17949715b3aa21c794701f69f2154e91b6acabc3 by CJ Johnson <johnsoncj@google.com>:

Add absl namesapce to internal/inlined_vector.h

PiperOrigin-RevId: 239030789

--
834628325953078cc08ed10d23bb8890e5bec897 by Derek Mauro <dmauro@google.com>:

Add test script that uses Docker to build Abseil with gcc-4.8,
libstdc++, and cmake.

PiperOrigin-RevId: 239028433

--
80fe24149ed73ed2ced995ad1e372fb060c60427 by CJ Johnson <johnsoncj@google.com>:

Factors data members of InlinedVector into an impl type called InlinedVectorStorage so that (in future changes) the contents of a vector can be grouped together with a single pointer.

PiperOrigin-RevId: 239021086

--
585331436d5d4d79f845e45dcf79d918a0dc6169 by Derek Mauro <dmauro@google.com>:

Add -Wno-missing-field-initializers to gcc compiler flags.
gcc-4.x has spurious missing field initializer warnings.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36750

PiperOrigin-RevId: 239017217

--
94602fe4e33ee3a552a7f2939c0f57a992f55075 by Abseil Team <absl-team@google.com>:

Formatting fixes.

PiperOrigin-RevId: 238983038

--
a1c1b63c08505574e0a8c491561840cecb2bb93e by Derek Mauro <dmauro@google.com>:

Add hermetic test script that uses Docker to build with a very recent
version of clang with libc++ and bazel.

PiperOrigin-RevId: 238669118

--
e525f8d20bc2f79a0d69336b902f63858f3bff9d by Derek Mauro <dmauro@google.com>:

Disable the test optionalTest.InPlaceTSFINAEBug until libc++ is updated.

PiperOrigin-RevId: 238661703

--
f99a2a0b5ec424a059678f7f226600f137b4c74e by Derek Mauro <dmauro@google.com>:

Correct the check for the FlatHashMap-Any test bug (list conditions
instead of platforms when possible)

PiperOrigin-RevId: 238653344

--
777928035dbcbf39f361eb7d10dc3696822f692f by Jon Cohen <cohenjon@google.com>:

Add install rules for Abseil CMake.

These are attempted to be limited to in-project installation.  This serves two purposes -- first it's morally the same as using Abseil in-source, except you don't have to rebuild us every time.  Second, the presence of an install rule makes life massively simpler for package manager maintainers.

Currently this doesn't install absl tests or testonly libraries.  This can be added in a follow-up patch.

Fixes #38, Fixes #80, Closes #182

PiperOrigin-RevId: 238645836

--
ded1c6ce697c191b7a6ff14572b3e6d183117b2c by Derek Mauro <dmauro@google.com>:

Add hermetic test script that uses Docker to build with a very recent
version of clang with libstdc++ and bazel.

PiperOrigin-RevId: 238517815
GitOrigin-RevId: bdce7e57e9e886eff1114d0266781b443f7ec639
Change-Id: I6f745869cb8ef63851891ccac05ae9a7dd241c4f
  • Loading branch information
Abseil Team authored and derekmauro committed Mar 19, 2019
1 parent 6fd8271 commit bf29470
Show file tree
Hide file tree
Showing 80 changed files with 770 additions and 194 deletions.
39 changes: 30 additions & 9 deletions CMake/AbseilHelpers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

include(CMakeParseArguments)
include(AbseilConfigureCopts)
include(GNUInstallDirs)

# The IDE folder for Abseil that will be used if Abseil is included in a CMake
# project that sets
Expand Down Expand Up @@ -59,20 +60,17 @@ set(ABSL_IDE_FOLDER Abseil)
# "b.cc"
# DEPS
# absl_internal_awesome # not "awesome"!
# PUBLIC
# )
#
# If PUBLIC is set, absl_cc_library will instead create a target named
# absl_${NAME} and still an alias absl::${NAME}.
#
# absl_cc_library(
# NAME
# main_lib
# ...
# PUBLIC
# DEPS
# absl::fantastic_lib # since fantastic_lib is public
# )
#
# User can then use the library as absl::main_lib (although absl_main_lib is defined too).
#
# TODO: Implement "ALWAYSLINK"
function(absl_cc_library)
cmake_parse_arguments(ABSL_CC_LIB
Expand All @@ -83,7 +81,7 @@ function(absl_cc_library)
)

if (NOT ABSL_CC_LIB_TESTONLY OR ABSL_RUN_TESTS)
set(_NAME "absl_${ABSL_CC_LIB_NAME}")
set(_NAME "${ABSL_CC_LIB_NAME}")

# Check if this is a header-only library
# Note that as of February 2019, many popular OS's (for example, Ubuntu
Expand All @@ -105,7 +103,10 @@ function(absl_cc_library)
add_library(${_NAME} STATIC "")
target_sources(${_NAME} PRIVATE ${ABSL_CC_LIB_SRCS} ${ABSL_CC_LIB_HDRS})
target_include_directories(${_NAME}
PUBLIC ${ABSL_COMMON_INCLUDE_DIRS})
PUBLIC
$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_compile_options(${_NAME}
PRIVATE ${ABSL_CC_LIB_COPTS})
target_link_libraries(${_NAME}
Expand All @@ -126,17 +127,37 @@ function(absl_cc_library)
# INTERFACE libraries can't have the CXX_STANDARD property set
set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${ABSL_CXX_STANDARD})
set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)

# When being installed, we lose the absl_ prefix. We want to put it back
# to have properly named lib files. This is a no-op when we are not being
# installed.
set_target_properties(${_NAME} PROPERTIES
OUTPUT_NAME "absl_${_NAME}"
)
else()
# Generating header-only library
add_library(${_NAME} INTERFACE)
target_include_directories(${_NAME}
INTERFACE ${ABSL_COMMON_INCLUDE_DIRS})
INTERFACE
$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_link_libraries(${_NAME}
INTERFACE ${ABSL_CC_LIB_DEPS} ${ABSL_CC_LIB_LINKOPTS}
)
target_compile_definitions(${_NAME} INTERFACE ${ABSL_CC_LIB_DEFINES})
endif()

# TODO currently we don't install googletest alongside abseil sources, so
# installed abseil can't be tested.
if (NOT ABSL_CC_LIB_TESTONLY)
install(TARGETS ${_NAME} EXPORT ${PROJECT_NAME}Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
endif()

add_library(absl::${ABSL_CC_LIB_NAME} ALIAS ${_NAME})
endif()
endfunction()
Expand Down
6 changes: 6 additions & 0 deletions CMake/abslConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## absl CMake configuration file. Note that there is no corresponding
# abslConfigVersion.cmake since non-LTS Abseil isn't versioned.

@PACKAGE_INIT@

include ("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
47 changes: 47 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,26 @@ if (POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()

# if command can use IN_LIST
cmake_policy(SET CMP0057 NEW)

project(absl)

# when absl is included as subproject (i.e. using add_subdirectory(abseil-cpp))
# in the source tree of a project that uses it, install rules are disabled.
if(NOT "^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$")
set(ABSL_ENABLE_INSTALL FALSE)
else()
set(ABSL_ENABLE_INSTALL TRUE)
endif()

list(APPEND CMAKE_MODULE_PATH
${CMAKE_CURRENT_LIST_DIR}/CMake
${CMAKE_CURRENT_LIST_DIR}/absl/copts
)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
include(AbseilHelpers)


Expand Down Expand Up @@ -73,11 +85,23 @@ if(${ABSL_RUN_TESTS})
enable_testing()
endif()

# We don't support system-wide installation
list(APPEND SYSTEM_INSTALL_DIRS "/usr/local" "/usr" "/opt/" "/opt/local" "c:/Program Files/${PROJECT_NAME}")
if(NOT DEFINED CMAKE_INSTALL_PREFIX OR CMAKE_INSTALL_PREFIX IN_LIST SYSTEM_INSTALL_DIRS)
message(WARNING "\
The default and system-level install directories are unsupported except in LTS \
releases of Abseil. Please set CMAKE_INSTALL_PREFIX to install Abseil in your \
source or build tree directly.\
")
endif()

## check targets
if(BUILD_TESTING)

if(${ABSL_USE_GOOGLETEST_HEAD})
include(CMake/DownloadGTest.cmake)
set(absl_gtest_src_dir ${CMAKE_BINARY_DIR}/googletest-src)
set(absl_gtest_build_dir ${CMAKE_BINARY_DIR}/googletest-build)
endif()

check_target(gtest)
Expand All @@ -93,3 +117,26 @@ if(BUILD_TESTING)
endif()

add_subdirectory(absl)

# install as a subdirectory only
install(EXPORT ${PROJECT_NAME}Targets
NAMESPACE absl::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
)

configure_package_config_file(
CMake/abslConfig.cmake.in
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
)

install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake
)

install(DIRECTORY absl
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING
PATTERN "*.inc"
PATTERN "*.h"
)
2 changes: 0 additions & 2 deletions absl/algorithm/container.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
// For template parameter and variable naming, `C` indicates the container type
// to which the function is applied, `Pred` indicates the predicate object type
// to be used by the function and `T` indicates the applicable element type.
//

#ifndef ABSL_ALGORITHM_CONTAINER_H_
#define ABSL_ALGORITHM_CONTAINER_H_
Expand Down Expand Up @@ -648,7 +647,6 @@ container_algorithm_internal::ContainerIter<C> c_generate_n(C& c, Size n,
// and `unique()` are omitted, because it's not clear whether or not such
// functions should call erase on their supplied sequences afterwards. Either
// behavior would be surprising for a different set of users.
//

// c_remove_copy()
//
Expand Down
1 change: 0 additions & 1 deletion absl/base/const_init.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@
//
// The absl::kConstInit tag should only be used to define objects with static
// or thread_local storage duration.
//

namespace absl {

Expand Down
1 change: 1 addition & 0 deletions absl/base/dynamic_annotations.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
#define ANNOTATE_MEMORY_IS_INITIALIZED(address, size) /* empty */
#define ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) /* empty */
#endif /* DYNAMIC_ANNOTATIONS_ENABLED || MEMORY_SANITIZER */

/* TODO(delesley) -- Replace __CLANG_SUPPORT_DYN_ANNOTATION__ with the
appropriate feature ID. */
#if defined(__clang__) && (!defined(SWIG)) \
Expand Down
1 change: 0 additions & 1 deletion absl/base/internal/cycleclock.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
// not necessarily "CPU cycles" and code should not rely on that behavior, even
// if experimentally observed.
//
//
// An arbitrary offset may have been added to the counter at power on.
//
// On some platforms, the rate and offset of the counter may differ
Expand Down
1 change: 1 addition & 0 deletions absl/base/internal/low_level_alloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,5 @@ class LowLevelAlloc {

} // namespace base_internal
} // namespace absl

#endif // ABSL_BASE_INTERNAL_LOW_LEVEL_ALLOC_H_
1 change: 1 addition & 0 deletions absl/base/internal/low_level_alloc_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ static void Test(bool use_new_arena, bool call_malloc_hook, int n) {
TEST_ASSERT(LowLevelAlloc::DeleteArena(arena));
}
}

// LowLevelAlloc is designed to be safe to call before main().
static struct BeforeMain {
BeforeMain() {
Expand Down
3 changes: 2 additions & 1 deletion absl/base/internal/low_level_scheduling.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ class SchedulingGuard {
//------------------------------------------------------------------------------
// End of public interfaces.
//------------------------------------------------------------------------------

inline bool SchedulingGuard::ReschedulingIsAllowed() {
return false;
}
Expand All @@ -98,7 +99,7 @@ inline void SchedulingGuard::EnableRescheduling(bool /* disable_result */) {
return;
}


} // namespace base_internal
} // namespace absl

#endif // ABSL_BASE_INTERNAL_LOW_LEVEL_SCHEDULING_H_
1 change: 1 addition & 0 deletions absl/base/internal/raw_logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
// ABSL_RAW_LOG(ERROR, "Failed foo with %i: %s", status, error);
// This will print an almost standard log line like this to stderr only:
// E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file

#define ABSL_RAW_LOG(severity, ...) \
do { \
constexpr const char* absl_raw_logging_internal_basename = \
Expand Down
6 changes: 3 additions & 3 deletions absl/base/internal/scoped_set_env.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const int kMaxEnvVarValueSize = 1024;

void SetEnvVar(const char* name, const char* value) {
#ifdef _WIN32
SetEnvironmentVariable(name, value);
SetEnvironmentVariableA(name, value);
#else
if (value == nullptr) {
::unsetenv(name);
Expand All @@ -49,7 +49,7 @@ ScopedSetEnv::ScopedSetEnv(const char* var_name, const char* new_value)
: var_name_(var_name), was_unset_(false) {
#ifdef _WIN32
char buf[kMaxEnvVarValueSize];
auto get_res = GetEnvironmentVariable(var_name_.c_str(), buf, sizeof(buf));
auto get_res = GetEnvironmentVariableA(var_name_.c_str(), buf, sizeof(buf));
ABSL_INTERNAL_CHECK(get_res < sizeof(buf), "value exceeds buffer size");

if (get_res == 0) {
Expand All @@ -58,7 +58,7 @@ ScopedSetEnv::ScopedSetEnv(const char* var_name, const char* new_value)
old_value_.assign(buf, get_res);
}

SetEnvironmentVariable(var_name_.c_str(), new_value);
SetEnvironmentVariableA(var_name_.c_str(), new_value);
#else
const char* val = ::getenv(var_name_.c_str());
if (val == nullptr) {
Expand Down
4 changes: 2 additions & 2 deletions absl/base/internal/scoped_set_env_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ using absl::base_internal::ScopedSetEnv;
std::string GetEnvVar(const char* name) {
#ifdef _WIN32
char buf[1024];
auto get_res = GetEnvironmentVariable(name, buf, sizeof(buf));
if (get_res == sizeof(buf)) {
auto get_res = GetEnvironmentVariableA(name, buf, sizeof(buf));
if (get_res >= sizeof(buf)) {
return "TOO_BIG";
}

Expand Down
1 change: 1 addition & 0 deletions absl/base/internal/thread_identity.h
Original file line number Diff line number Diff line change
Expand Up @@ -237,4 +237,5 @@ inline ThreadIdentity* CurrentThreadIdentityIfPresent() {

} // namespace base_internal
} // namespace absl

#endif // ABSL_BASE_INTERNAL_THREAD_IDENTITY_H_
2 changes: 2 additions & 0 deletions absl/base/internal/unscaledcycleclock.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
defined(_M_IX86) || defined(_M_X64))
#define ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY
#endif

namespace absl {
namespace time_internal {
class UnscaledCycleClockWrapperForGetCurrentTime;
Expand Down Expand Up @@ -114,6 +115,7 @@ class UnscaledCycleClock {

} // namespace base_internal
} // namespace absl

#endif // ABSL_USE_UNSCALED_CYCLECLOCK

#endif // ABSL_BASE_INTERNAL_UNSCALEDCYCLECLOCK_H_
1 change: 0 additions & 1 deletion absl/base/log_severity.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
// 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.
//

#ifndef ABSL_BASE_INTERNAL_LOG_SEVERITY_H_
#define ABSL_BASE_INTERNAL_LOG_SEVERITY_H_
Expand Down
2 changes: 2 additions & 0 deletions absl/base/spinlock_test_common.cc
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ namespace {

static constexpr int kArrayLength = 10;
static uint32_t values[kArrayLength];

static SpinLock static_spinlock(base_internal::kLinkerInitialized);
static SpinLock static_cooperative_spinlock(
base_internal::kLinkerInitialized,
Expand Down Expand Up @@ -189,6 +190,7 @@ TEST(SpinLock, WaitCyclesEncoding) {
SpinLockTest::DecodeWaitCycles(before_max_value);
EXPECT_GT(expected_max_value_decoded, before_max_value_decoded);
}

TEST(SpinLockWithThreads, StaticSpinLock) {
ThreadedTest(&static_spinlock);
}
Expand Down
2 changes: 1 addition & 1 deletion absl/base/thread_annotations.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
// code. The annotations can also help program analysis tools to identify
// potential thread safety issues.
//
//
// These annotations are implemented using compiler attributes. Using the macros
// defined here instead of raw attributes allow for portability and future
// compatibility.
Expand All @@ -34,6 +33,7 @@

#ifndef ABSL_BASE_THREAD_ANNOTATIONS_H_
#define ABSL_BASE_THREAD_ANNOTATIONS_H_

#if defined(__clang__)
#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
#else
Expand Down
1 change: 0 additions & 1 deletion absl/compiler_config_setting.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
# 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.
#

"""Creates config_setting that allows selecting based on 'compiler' value."""

Expand Down
10 changes: 10 additions & 0 deletions absl/container/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,21 @@ cc_test(
],
)

cc_library(
name = "inlined_vector_internal",
hdrs = ["internal/inlined_vector.h"],
copts = ABSL_DEFAULT_COPTS,
deps = [
"//absl/meta:type_traits",
],
)

cc_library(
name = "inlined_vector",
hdrs = ["inlined_vector.h"],
copts = ABSL_DEFAULT_COPTS,
deps = [
":inlined_vector_internal",
"//absl/algorithm",
"//absl/base:core_headers",
"//absl/base:throw_delegate",
Expand Down
Loading

0 comments on commit bf29470

Please sign in to comment.