diff --git a/Makefile b/Makefile index 2858c6ec2..354654de2 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. See the AUTHORS file for names of contributors. +# Inherit some settings from environment variables, if available CXX ?= g++ CC ?= gcc +INSTALL_PATH ?= $(CURDIR) #----------------------------------------------- # Uncomment exactly one of the lines labelled (A), (B), and (C) below @@ -19,8 +21,8 @@ $(shell sh ./build_detect_platform) # this file is generated by build_detect_platform to set build flags and sources include build_config.mk -CFLAGS += -c -I. -I./include $(PLATFORM_CCFLAGS) $(OPT) -CXXFLAGS += -c -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) +CFLAGS += -I. -I./include $(PLATFORM_CCFLAGS) $(OPT) +CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) LDFLAGS += $(PLATFORM_LDFLAGS) @@ -55,15 +57,33 @@ BENCHMARKS = db_bench_sqlite3 db_bench_tree_db LIBRARY = libleveldb.a MEMENVLIBRARY = libmemenv.a -all: $(LIBRARY) +default: all + +# Should we build shared libraries? +ifneq ($(PLATFORM_SHARED_EXT),) +# Update db.h if you change these. +SHARED_MAJOR = 1 +SHARED_MINOR = 3 +SHARED1 = libleveldb.$(PLATFORM_SHARED_EXT) +SHARED2 = $(SHARED1).$(SHARED_MAJOR) +SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR) +SHARED = $(SHARED1) $(SHARED2) $(SHARED3) +$(SHARED3): + $(CXX) $(LDFLAGS) $(PLATFORM_SHARED_LDFLAGS)$(INSTALL_PATH)/$(SHARED2) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(SOURCES) -o $(SHARED3) +$(SHARED2): $(SHARED3) + ln -fs $(SHARED3) $(SHARED2) +$(SHARED1): $(SHARED3) + ln -fs $(SHARED3) $(SHARED1) +endif + +all: $(SHARED) $(LIBRARY) -check: $(PROGRAMS) $(TESTS) +check: all $(PROGRAMS) $(TESTS) for t in $(TESTS); do echo "***** Running $$t"; ./$$t || exit 1; done clean: - -rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(MEMENVLIBRARY) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o + -rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(SHARED) $(MEMENVLIBRARY) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o build_config.mk -rm -rf ios-x86/* ios-arm/* - -rm build_config.mk $(LIBRARY): $(LIBOBJECTS) rm -f $@ @@ -142,22 +162,22 @@ IOSVERSION=$(shell defaults read /Developer/Platforms/iPhoneOS.platform/version .cc.o: mkdir -p ios-x86/$(dir $@) - $(SIMULATORROOT)/usr/bin/$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 $< -o ios-x86/$@ + $(SIMULATORROOT)/usr/bin/$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -c $< -o ios-x86/$@ mkdir -p ios-arm/$(dir $@) - $(DEVICEROOT)/usr/bin/$(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 $< -o ios-arm/$@ + $(DEVICEROOT)/usr/bin/$(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -c $< -o ios-arm/$@ lipo ios-x86/$@ ios-arm/$@ -create -output $@ .c.o: mkdir -p ios-x86/$(dir $@) - $(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 $< -o ios-x86/$@ + $(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -c $< -o ios-x86/$@ mkdir -p ios-arm/$(dir $@) - $(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 $< -o ios-arm/$@ + $(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -c $< -o ios-arm/$@ lipo ios-x86/$@ ios-arm/$@ -create -output $@ else .cc.o: - $(CXX) $(CXXFLAGS) $< -o $@ + $(CXX) $(CXXFLAGS) -c $< -o $@ .c.o: - $(CC) $(CFLAGS) $< -o $@ + $(CC) $(CFLAGS) -c $< -o $@ endif diff --git a/build_detect_platform b/build_detect_platform index df85264dc..64fcaefcc 100644 --- a/build_detect_platform +++ b/build_detect_platform @@ -5,6 +5,9 @@ # # build_config.mk will set the following variables: # PLATFORM_LDFLAGS Linker flags +# PLATFORM_SHARED_EXT Extension for shared libraries +# PLATFORM_SHARED_LDFLAGS Flags for building shared library +# PLATFORM_SHARED_CFLAGS Flags for compiling objects for shared library # PLATFORM_CCFLAGS C compiler flags # PLATFORM_CXXFLAGS C++ compiler flags. Will contain: # -DLEVELDB_PLATFORM_POSIX if cstdatomic is present @@ -29,12 +32,17 @@ COMMON_FLAGS= PLATFORM_CCFLAGS= PLATFORM_CXXFLAGS= PLATFORM_LDFLAGS= +PLATFORM_SHARED_EXT="so" +PLATFORM_SHARED_LDFLAGS="-shared -Wl,-soname -Wl," +PLATFORM_SHARED_CFLAGS="-fPIC" # On GCC, we pick libc's memcmp over GCC's memcmp via -fno-builtin-memcmp case "$TARGET_OS" in Darwin) PLATFORM=OS_MACOSX COMMON_FLAGS="-fno-builtin-memcmp -DOS_MACOSX" + PLATFORM_SHARED_EXT=dylib + PLATFORM_SHARED_LDFLAGS="-dynamiclib -install_name " PORT_FILE=port/port_posix.cc ;; Linux) @@ -143,3 +151,6 @@ echo "PLATFORM=$PLATFORM" >> build_config.mk echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> build_config.mk echo "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS" >> build_config.mk echo "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS" >> build_config.mk +echo "PLATFORM_SHARED_CFLAGS=$PLATFORM_SHARED_CFLAGS" >> build_config.mk +echo "PLATFORM_SHARED_EXT=$PLATFORM_SHARED_EXT" >> build_config.mk +echo "PLATFORM_SHARED_LDFLAGS=$PLATFORM_SHARED_LDFLAGS" >> build_config.mk diff --git a/db/skiplist.h b/db/skiplist.h index 0481575b2..af85be6d0 100644 --- a/db/skiplist.h +++ b/db/skiplist.h @@ -105,7 +105,8 @@ class SkipList { port::AtomicPointer max_height_; // Height of the entire list inline int GetMaxHeight() const { - return reinterpret_cast(max_height_.NoBarrier_Load()); + return static_cast( + reinterpret_cast(max_height_.NoBarrier_Load())); } // Read/written only by Insert(). diff --git a/include/leveldb/db.h b/include/leveldb/db.h index c1182b759..c7d516762 100644 --- a/include/leveldb/db.h +++ b/include/leveldb/db.h @@ -12,8 +12,9 @@ namespace leveldb { +// Update Makefile if you change these static const int kMajorVersion = 1; -static const int kMinorVersion = 2; +static const int kMinorVersion = 3; struct Options; struct ReadOptions; diff --git a/include/leveldb/status.h b/include/leveldb/status.h index 3355fac4c..11dbd4b47 100644 --- a/include/leveldb/status.h +++ b/include/leveldb/status.h @@ -54,6 +54,12 @@ class Status { // Returns true iff the status indicates a NotFound error. bool IsNotFound() const { return code() == kNotFound; } + // Returns true iff the status indicates a Corruption error. + bool IsCorruption() const { return code() == kCorruption; } + + // Returns true iff the status indicates an IOError. + bool IsIOError() const { return code() == kIOError; } + // Return a string representation of this status suitable for printing. // Returns the string "OK" for success. std::string ToString() const;