Добавлена базовая поддержка CMake (пока проверено только на OS X) без сборки ассемблерного кода
This commit is contained in:
parent
2ed2440710
commit
a175df0586
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,3 +7,4 @@ cpputil.creator.user
|
|||||||
cpputil.files
|
cpputil.files
|
||||||
cpputil.includes
|
cpputil.includes
|
||||||
cpputil.config
|
cpputil.config
|
||||||
|
.DS_Store
|
||||||
16
CMakeLists.txt
Executable file
16
CMakeLists.txt
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
set(CMAKE_BUILD_TYPE DEBUG)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "-std=c++11")
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
|
||||||
|
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib)
|
||||||
|
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/usr)
|
||||||
|
|
||||||
|
include_directories(include)
|
||||||
|
|
||||||
|
add_subdirectory(src)
|
||||||
|
add_subdirectory(test)
|
||||||
19
src/CMakeLists.txt
Executable file
19
src/CMakeLists.txt
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
set(MAIN_PROJECT_NAME "cpputil")
|
||||||
|
set(SRC_DIR ".")
|
||||||
|
set(INCLUDE_DIR ../include ./asm/include)
|
||||||
|
|
||||||
|
project(${MAIN_PROJECT_NAME} CXX)
|
||||||
|
aux_source_directory(${SRC_DIR} SRC_FILES)
|
||||||
|
include_directories(${INCLUDE_DIR})
|
||||||
|
add_library(${MAIN_PROJECT_NAME} STATIC ${SRC_FILES})
|
||||||
|
target_link_libraries(${MAIN_PROJECT_NAME})
|
||||||
|
|
||||||
|
install(TARGETS ${MAIN_PROJECT_NAME}
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
ARCHIVE DESTINATION lib)
|
||||||
|
|
||||||
|
install(DIRECTORY ${INCLUDE_DIR}/
|
||||||
|
DESTINATION include/${PROJECT_NAME}
|
||||||
|
FILES_MATCHING PATTERN "*.h")
|
||||||
@ -1,6 +1,5 @@
|
|||||||
#include "ustring.h"
|
#include "ustring.h"
|
||||||
#include "ustring_asm.h"
|
#include "ustring_asm.h"
|
||||||
#include <cstring>
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -381,7 +380,7 @@ std::size_t ustring::find(const ustring& str, std::size_t pos /* = 0 */) const
|
|||||||
return npos;
|
return npos;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
/*
|
/*
|
||||||
char32_t* fpos = reinterpret_cast<char32_t*>(memmem(_pData + pos, (_len - pos)*sizeof(char32_t), str._pData, str._len*sizeof(char32_t)));
|
char32_t* fpos = reinterpret_cast<char32_t*>(memmem(_pData + pos, (_len - pos)*sizeof(char32_t), str._pData, str._len*sizeof(char32_t)));
|
||||||
if(fpos)
|
if(fpos)
|
||||||
@ -519,7 +518,7 @@ void ustring::clear()
|
|||||||
*/
|
*/
|
||||||
bool ustring::empty() const
|
bool ustring::empty() const
|
||||||
{
|
{
|
||||||
return (_len == 0 ? true : false);
|
return (_len == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
32
src/utf.cpp
32
src/utf.cpp
@ -1,8 +1,16 @@
|
|||||||
#include "utf.h"
|
#include "utf.h"
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#if defined(__clang__)
|
||||||
|
#include <libkern/OSByteOrder.h>
|
||||||
|
#define bswap_32 OSSwapInt32
|
||||||
|
#define bswap_16 OSSwapInt16
|
||||||
|
#elif defined(__GNUC__)
|
||||||
#include <byteswap.h>
|
#include <byteswap.h>
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define bswap_16 _byteswap_ushort
|
||||||
|
#define bswap_32 _byteswap_ulong
|
||||||
|
#else
|
||||||
|
#error compiler not supported
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -83,13 +91,7 @@ byte_order current_byte_order()
|
|||||||
*/
|
*/
|
||||||
char16_t invert_byte_order_16( char16_t val )
|
char16_t invert_byte_order_16( char16_t val )
|
||||||
{
|
{
|
||||||
#ifdef __GNUC__
|
|
||||||
return bswap_16(val);
|
return bswap_16(val);
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
return _byteswap_ushort(val);
|
|
||||||
#else
|
|
||||||
#error compiler not supported
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,13 +101,7 @@ char16_t invert_byte_order_16( char16_t val )
|
|||||||
*/
|
*/
|
||||||
char32_t invert_byte_order_32(char32_t val)
|
char32_t invert_byte_order_32(char32_t val)
|
||||||
{
|
{
|
||||||
#ifdef __GNUC__
|
|
||||||
return bswap_32(val);
|
return bswap_32(val);
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
return _byteswap_ulong(val);
|
|
||||||
#else
|
|
||||||
#error compiler not supported
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -130,7 +126,7 @@ void utf8_to_ucs4(const char* src, char32_t* dst, std::size_t symbols, bool need
|
|||||||
|
|
||||||
if(bytes == 1) // ASCII
|
if(bytes == 1) // ASCII
|
||||||
{
|
{
|
||||||
s = *src;
|
s = static_cast<uint32_t>(*src);
|
||||||
}
|
}
|
||||||
else if(bytes > 1 && bytes <= UTF8_MAX_SYMBOL_SIZE) // Unicode
|
else if(bytes > 1 && bytes <= UTF8_MAX_SYMBOL_SIZE) // Unicode
|
||||||
{
|
{
|
||||||
@ -220,7 +216,7 @@ void ucs4_to_utf8(const char32_t* src, char* dst, std::size_t symbols, bool need
|
|||||||
{
|
{
|
||||||
if(src[i] < 0xFFFF)
|
if(src[i] < 0xFFFF)
|
||||||
{
|
{
|
||||||
if(sprintf(dst, "\\u%04X", src[i]) < 0)
|
if(sprintf(dst, "\\u%04X", static_cast<unsigned int>(src[i])) < 0)
|
||||||
{
|
{
|
||||||
throw bad_conversion("error escaping character", src[i]);
|
throw bad_conversion("error escaping character", src[i]);
|
||||||
}
|
}
|
||||||
@ -228,7 +224,7 @@ void ucs4_to_utf8(const char32_t* src, char* dst, std::size_t symbols, bool need
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(sprintf(dst, "\\U%08X", src[i]) < 0)
|
if(sprintf(dst, "\\U%08X", static_cast<unsigned int>(src[i])) < 0)
|
||||||
{
|
{
|
||||||
throw bad_conversion("error escaping character", src[i]);
|
throw bad_conversion("error escaping character", src[i]);
|
||||||
}
|
}
|
||||||
@ -337,8 +333,6 @@ std::size_t utf8_first_byte_mask(std::size_t symbolSize)
|
|||||||
case 6: return 0xE0;
|
case 6: return 0xE0;
|
||||||
default: return 0;
|
default: return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
51
test/CMakeLists.txt
Executable file
51
test/CMakeLists.txt
Executable file
@ -0,0 +1,51 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
set(TEST_PROJECT_NAME "cpputil_test")
|
||||||
|
set(SRC_DIR ".")
|
||||||
|
set(REQUIRED_LIBRARIES cpputil)
|
||||||
|
|
||||||
|
# https://googletest.googlecode.com/files/gtest-1.7.0.zip
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
INCLUDE(ExternalProject)
|
||||||
|
SET_DIRECTORY_PROPERTIES(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/ThirdParty)
|
||||||
|
|
||||||
|
ExternalProject_Add(
|
||||||
|
googletest
|
||||||
|
URL https://googletest.googlecode.com/files/gtest-1.7.0.zip
|
||||||
|
TIMEOUT 100
|
||||||
|
CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${CMAKE_SOURCE_DIR}/lib
|
||||||
|
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${CMAKE_SOURCE_DIR}/lib
|
||||||
|
-Dgtest_force_shared_crt=ON
|
||||||
|
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
|
||||||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
LOG_DOWNLOAD ON
|
||||||
|
LOG_CONFIGURE ON
|
||||||
|
LOG_BUILD ON)
|
||||||
|
|
||||||
|
ExternalProject_Get_Property(googletest source_dir)
|
||||||
|
ExternalProject_Get_Property(googletest binary_dir)
|
||||||
|
INCLUDE_DIRECTORIES(${source_dir}/include)
|
||||||
|
#link_directories(${binary_dir}/Debug)
|
||||||
|
else()
|
||||||
|
FIND_PACKAGE(GTest REQUIRED)
|
||||||
|
if(NOT GTEST_FOUND)
|
||||||
|
message(SEND_ERROR "Failed to find Google Test Framework")
|
||||||
|
return()
|
||||||
|
else()
|
||||||
|
include_directories(${GTEST_INCLUDE_DIRS})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
project(${TEST_PROJECT_NAME} CXX)
|
||||||
|
aux_source_directory(${SRC_DIR} TEST_SRC)
|
||||||
|
add_executable(${TEST_PROJECT_NAME} ${TEST_SRC})
|
||||||
|
SET_TARGET_PROPERTIES(${TEST_PROJECT_NAME} PROPERTIES ENABLE_EXPORTS TRUE)
|
||||||
|
ADD_DEPENDENCIES(${TEST_PROJECT_NAME} googletest cpputil)
|
||||||
|
|
||||||
|
target_link_libraries(${TEST_PROJECT_NAME} ${REQUIRED_LIBRARIES} ${CMAKE_SOURCE_DIR}/lib/libgtest.a)
|
||||||
|
|
||||||
|
install(TARGETS ${TEST_PROJECT_NAME}
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
ARCHIVE DESTINATION lib)
|
||||||
Loading…
Reference in New Issue
Block a user