Добавлена базовая поддержка CMake (пока проверено только на OS X) без сборки ассемблерного кода

This commit is contained in:
Selim Mustafaev 2014-09-20 20:38:57 +04:00
parent 2ed2440710
commit a175df0586
6 changed files with 104 additions and 24 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ cpputil.creator.user
cpputil.files
cpputil.includes
cpputil.config
.DS_Store

16
CMakeLists.txt Executable file
View 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
View 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")

View File

@ -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);
}
/**

View File

@ -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
View 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)