Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

.DS_Store
/*.log
/build
/install

3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "pcre1"]
path = pcre1
url = https://github.com/PierceLBrooks/pcre1.git
209 changes: 209 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)

set(REGXSTR_VERSION "1.0")
set(REGXSTR_LANGUAGES )
set(REGXSTR_CODESIGNING )
set(SW_VERS "")
set(UNAME_M "")

if (APPLE)
list(APPEND REGXSTR_LANGUAGES "C")
list(APPEND REGXSTR_LANGUAGES "CXX")
list(APPEND REGXSTR_LANGUAGES "OBJC")
list(APPEND REGXSTR_LANGUAGES "OBJCXX")
execute_process(COMMAND sw_vers -productVersion OUTPUT_VARIABLE SW_VERS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if ("${CMAKE_GENERATOR}" MATCHES "Xcode")
execute_process(COMMAND uname -m OUTPUT_VARIABLE UNAME_M ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if (NOT "$ENV{SYSROOT}" STREQUAL "")
set(SYSROOT "$ENV{SYSROOT}")
else()
execute_process(COMMAND xcodebuild -version -sdk macosx Path OUTPUT_VARIABLE SYSROOT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
if (NOT EXISTS "${SYSROOT}")
message(FATAL_ERROR "SYSROOT does not exist!")
endif()
set(CMAKE_OSX_SYSROOT "${SYSROOT}" CACHE STRING "CMAKE_OSX_SYSROOT" FORCE)
if ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "")
if ("${UNAME_M}" MATCHES "arm")
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "CMAKE_OSX_ARCHITECTURES" FORCE)
else()
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)" CACHE STRING "CMAKE_OSX_ARCHITECTURES" FORCE)
endif()
endif()
endif()
execute_process(COMMAND security find-identity -v -p codesigning OUTPUT_VARIABLE SECURITY_FOUND_IDENTITY ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
set(PATTERN " ")
foreach(IDX RANGE 1 40 1)
string(APPEND PATTERN "[a-fA-F0-9]")
endforeach()
string(APPEND PATTERN " ")
string(REGEX MATCH "${PATTERN}" IDENTITY "${SECURITY_FOUND_IDENTITY}")
if (NOT "${IDENTITY}" STREQUAL "")
string(STRIP "${IDENTITY}" REGXSTR_CODESIGNING)
endif()
else()
list(APPEND REGXSTR_LANGUAGES "C")
list(APPEND REGXSTR_LANGUAGES "CXX")
if (MINGW)
list(APPEND REGXSTR_LANGUAGES "RC")
endif()
endif()

macro(set_option var default type docstring)
if (("${type}" STREQUAL "STRING" AND "${var}" STREQUAL "") OR NOT DEFINED ${var})
set(${var} ${default})
endif()
set(${var} ${${var}} CACHE ${type} ${docstring} FORCE)
endmacro()

if ("${CMAKE_GENERATOR}" MATCHES "Xcode" AND NOT "${SW_VERS}" STREQUAL "")
string(REPLACE "." ";" SW_VERS_MAJOR "${SW_VERS}")
list(POP_FRONT SW_VERS_MAJOR SW_VERS_HEAD)
set(SW_VERS "${SW_VERS_HEAD}")
set_option(CMAKE_OSX_DEPLOYMENT_TARGET "${SW_VERS}" STRING "Choose the minimum MacOS deployment version")
endif()
set_option(CMAKE_BUILD_TYPE "Debug" STRING "Choose the type of build config variant (\"Debug\" or \"Release\")")
set_option(REGXSTR_LINKAGE "STATIC" STRING "Choose the type of library linkage for the libregxstr target (\"STATIC\" or \"SHARED\")")
set_option(REGXSTR_BINARY "ON" STRING "Whether or not to build the regxstr executable target (\"ON\" or \"OFF\")")
set_option(REGXSTR_TESTING "OFF" STRING "Whether or not to run unit tests (\"ON\" or \"OFF\")")

project(regxstrproject VERSION ${REGXSTR_VERSION} LANGUAGES ${REGXSTR_LANGUAGES})

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

set(CMAKE_SHARED_LIBRARY_PREFIX "")
set(CMAKE_STATIC_LIBRARY_PREFIX "")
if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
set(CMAKE_DEBUG_POSTFIX "${CMAKE_BUILD_TYPE}")
endif()

set(REGXSTR_DEF )
#list(APPEND REGXSTR_DEF "REGXSTR_VERSION=${REGXSTR_VERSION}")
if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED")
list(APPEND REGXSTR_DEF REGXSTR_LIBRARY_TYPE_SHARED)
set(BUILD_SHARED_LIBS ON)
else()
list(APPEND REGXSTR_DEF REGXSTR_LIBRARY_TYPE_STATIC)
endif()
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
list(APPEND REGXSTR_DEF REGXSTR_DEBUG)
list(APPEND REGXSTR_DEF TEST)
endif()
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
list(APPEND REGXSTR_DEF REGXSTR_CLANG)
endif()
if (APPLE)
list(APPEND REGXSTR_DEF REGXSTR_OS_APPLE)
elseif (ANDROID)
list(APPEND REGXSTR_DEF REGXSTR_OS_ANDROID)
elseif (MINGW OR MSVC)
list(APPEND REGXSTR_DEF REGXSTR_OS_WINDOWS)
if (MINGW)
list(APPEND REGXSTR_DEF REGXSTR_MINGW)
endif()
else()
list(APPEND REGXSTR_DEF REGXSTR_OS_LINUX)
endif()
if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
list(APPEND REGXSTR_DEF REGXSTR_BITNESS_32)
else ()
list(APPEND REGXSTR_DEF REGXSTR_BITNESS_64)
endif ()
include(TestBigEndian)
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
if(IS_BIG_ENDIAN)
list(APPEND REGXSTR_DEF REGXSTR_ENDIANNESS_BIG)
else()
list(APPEND REGXSTR_DEF REGXSTR_ENDIANNESS_LITTLE)
endif()

include_directories(${CMAKE_CURRENT_LIST_DIR})

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/pcre1)
include_directories(${PROJECT_BINARY_DIR}/pcre1)
endif()

set(REGXSTR_LIB_DEF )
foreach(DEF IN LISTS REGXSTR_DEF)
list(APPEND REGXSTR_LIB_DEF ${DEF})
endforeach()
list(APPEND REGXSTR_LIB_DEF REGXSTR_TARGET_TYPE_LIBRARY)

set(REGXSTR_LIB_SRC )
set(REGXSTR_LIB_INC )

list(APPEND REGXSTR_LIB_SRC ${CMAKE_CURRENT_LIST_DIR}/regxstring_impl.cpp)
list(APPEND REGXSTR_LIB_SRC ${CMAKE_CURRENT_LIST_DIR}/regxstring_impl.h)

list(APPEND REGXSTR_LIB_SRC ${CMAKE_CURRENT_LIST_DIR}/regxstring.cpp)
list(APPEND REGXSTR_LIB_SRC ${CMAKE_CURRENT_LIST_DIR}/regxstring.h)

list(APPEND REGXSTR_LIB_INC ${CMAKE_CURRENT_LIST_DIR}/regxstring.h)

add_library(libregxstr ${REGXSTR_LINKAGE} ${REGXSTR_LIB_SRC})
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
add_dependencies(libregxstr pcre)
endif()
if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED" AND (APPLE OR WINDOWS))
install(TARGETS libregxstr RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/bin LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/bin FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
else()
install(TARGETS libregxstr)
endif()
target_compile_features(libregxstr PRIVATE cxx_std_17)
set_target_properties(libregxstr PROPERTIES LINKER_LANGUAGE CXX)
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
target_link_libraries(libregxstr PRIVATE pcre pcreposix pcrecpp)
endif()
target_compile_definitions(libregxstr PRIVATE ${REGXSTR_LIB_DEF})
#set_target_properties(libregxstr PROPERTIES PUBLIC_HEADER "${REGXSTR_LIB_INC}")
install(FILES ${REGXSTR_LIB_INC} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/libregxstr)

set(REGXSTR_BIN_DEF )
foreach(DEF IN LISTS REGXSTR_DEF)
list(APPEND REGXSTR_BIN_DEF ${DEF})
endforeach()
list(APPEND REGXSTR_BIN_DEF REGXSTR_TARGET_TYPE_EXECUTABLE)

set(REGXSTR_BIN_SRC )
list(APPEND REGXSTR_BIN_SRC ${CMAKE_CURRENT_LIST_DIR}/main.cpp)
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
list(APPEND REGXSTR_BIN_SRC ${CMAKE_CURRENT_LIST_DIR}/test.h)
endif()

if ("${REGXSTR_BINARY}" STREQUAL "ON")
add_executable(regxstr ${REGXSTR_BIN_SRC})
add_dependencies(regxstr libregxstr)
install(TARGETS regxstr RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
target_compile_features(regxstr PRIVATE cxx_std_17)
set_target_properties(regxstr PROPERTIES LINKER_LANGUAGE CXX)
if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED")
target_link_libraries(regxstr PRIVATE libregxstr)
else()
target_link_libraries(regxstr PRIVATE libregxstr)
endif()
target_compile_definitions(regxstr PRIVATE ${REGXSTR_BIN_DEF})
if (APPLE)
add_custom_command(TARGET regxstr POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_PREFIX}/bin COMMENT "Make binary installation" WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
add_custom_command(TARGET regxstr POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_PREFIX}/lib COMMENT "Make library installation" WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
add_custom_command(TARGET regxstr POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_PREFIX}/include COMMENT "Make header installation" WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
if ("${CMAKE_GENERATOR}" MATCHES "Xcode" AND "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" AND NOT "${SW_VERS}" STREQUAL "")
#set_target_properties(regxstr PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development")
#set_target_properties(regxstr PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-")
set_target_properties(regxstr PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_LIST_DIR}/regxstr.entitlements)
add_custom_command(TARGET regxstr POST_BUILD COMMAND codesign --entitlements "${CMAKE_CURRENT_LIST_DIR}/regxstr.entitlements" --sign - --force --verbose --timestamp --deep $<TARGET_FILE:regxstr> || :)
if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED")
add_custom_command(TARGET regxstr POST_BUILD COMMAND codesign --entitlements "${CMAKE_CURRENT_LIST_DIR}/regxstr.entitlements" --sign - --force --verbose --timestamp --deep $<TARGET_FILE:libregxstr> || :)
endif()
endif()
add_custom_command(TARGET regxstr POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath "@executable_path/" $<TARGET_FILE:regxstr> || :)
string(LENGTH "${REGXSTR_CODESIGNING}" LEN)
if ("${LEN}" STREQUAL "40" AND "${CMAKE_BUILD_TYPE}" STREQUAL "Release" AND NOT "${SW_VERS}" STREQUAL "")
add_custom_command(TARGET regxstr POST_BUILD COMMAND codesign --sign "${REGXSTR_CODESIGNING}" --force --verbose --timestamp --deep $<TARGET_FILE:regxstr> || :)
if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED")
add_custom_command(TARGET regxstr POST_BUILD COMMAND codesign --sign "${REGXSTR_CODESIGNING}" --force --verbose --timestamp --deep $<TARGET_FILE:libregxstr> || :)
endif()
endif()
endif()
endif()

20 changes: 0 additions & 20 deletions Regx String.sln

This file was deleted.

Loading