Добавлена базовая поддержка 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.includes
|
||||
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_asm.h"
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
|
||||
/**
|
||||
@ -381,7 +380,7 @@ std::size_t ustring::find(const ustring& str, std::size_t pos /* = 0 */) const
|
||||
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)));
|
||||
if(fpos)
|
||||
@ -519,7 +518,7 @@ void ustring::clear()
|
||||
*/
|
||||
bool ustring::empty() const
|
||||
{
|
||||
return (_len == 0 ? true : false);
|
||||
return (_len == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
34
src/utf.cpp
34
src/utf.cpp
@ -1,8 +1,16 @@
|
||||
#include "utf.h"
|
||||
#include <cstring>
|
||||
|
||||
#ifdef __GNUC__
|
||||
#include <byteswap.h>
|
||||
#if defined(__clang__)
|
||||
#include <libkern/OSByteOrder.h>
|
||||
#define bswap_32 OSSwapInt32
|
||||
#define bswap_16 OSSwapInt16
|
||||
#elif defined(__GNUC__)
|
||||
#include <byteswap.h>
|
||||
#elif defined(_MSC_VER)
|
||||
#define bswap_16 _byteswap_ushort
|
||||
#define bswap_32 _byteswap_ulong
|
||||
#else
|
||||
#error compiler not supported
|
||||
#endif
|
||||
|
||||
/**
|
||||
@ -83,13 +91,7 @@ byte_order current_byte_order()
|
||||
*/
|
||||
char16_t invert_byte_order_16( char16_t val )
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
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)
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
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
|
||||
{
|
||||
s = *src;
|
||||
s = static_cast<uint32_t>(*src);
|
||||
}
|
||||
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(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]);
|
||||
}
|
||||
@ -228,7 +224,7 @@ void ucs4_to_utf8(const char32_t* src, char* dst, std::size_t symbols, bool need
|
||||
}
|
||||
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]);
|
||||
}
|
||||
@ -337,8 +333,6 @@ std::size_t utf8_first_byte_mask(std::size_t symbolSize)
|
||||
case 6: return 0xE0;
|
||||
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