From 2ff9d50e96422461aa89bfa602819e6476036f5b Mon Sep 17 00:00:00 2001 From: Pierce Brooks Date: Sun, 5 Apr 2026 16:31:24 -0400 Subject: [PATCH 1/3] migrate to cmake --- .gitignore | 6 ++ .gitmodules | 3 + CMakeLists.txt | 201 ++++++++++++++++++++++++++++++++++ Regx String.sln | 20 ---- Regx String.vcproj | 250 ------------------------------------------- makefile | 79 -------------- makefile.release | 79 -------------- pcre1 | 1 + regxstr.entitlements | 8 ++ regxstring_impl.h | 2 + 10 files changed, 221 insertions(+), 428 deletions(-) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 CMakeLists.txt delete mode 100644 Regx String.sln delete mode 100644 Regx String.vcproj delete mode 100644 makefile delete mode 100644 makefile.release create mode 160000 pcre1 create mode 100644 regxstr.entitlements diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..23d7664 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ + +.DS_Store +/*.log +/build +/install + diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e13beeb --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "pcre1"] + path = pcre1 + url = https://github.com/PierceLBrooks/pcre1.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e41dbe7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,201 @@ +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() + +add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/pcre1) + +include_directories(${CMAKE_CURRENT_LIST_DIR}) +include_directories(${PROJECT_BINARY_DIR}/pcre1) + +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}) +add_dependencies(libregxstr pcre) +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) +target_link_libraries(libregxstr PRIVATE pcre pcreposix pcrecpp) +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() + +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 $ || :) + 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 $ || :) + endif() + endif() + add_custom_command(TARGET regxstr POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath "@executable_path/" $ || :) + 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 $ || :) + if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED") + add_custom_command(TARGET regxstr POST_BUILD COMMAND codesign --sign "${REGXSTR_CODESIGNING}" --force --verbose --timestamp --deep $ || :) + endif() + endif() +endif() + diff --git a/Regx String.sln b/Regx String.sln deleted file mode 100644 index 62f6d64..0000000 --- a/Regx String.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Regx String", "Regx String.vcproj", "{5D9DE141-5BE7-45EB-A26C-923F12F8BF8B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5D9DE141-5BE7-45EB-A26C-923F12F8BF8B}.Debug|Win32.ActiveCfg = Debug|Win32 - {5D9DE141-5BE7-45EB-A26C-923F12F8BF8B}.Debug|Win32.Build.0 = Debug|Win32 - {5D9DE141-5BE7-45EB-A26C-923F12F8BF8B}.Release|Win32.ActiveCfg = Release|Win32 - {5D9DE141-5BE7-45EB-A26C-923F12F8BF8B}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Regx String.vcproj b/Regx String.vcproj deleted file mode 100644 index 875bb01..0000000 --- a/Regx String.vcproj +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/makefile b/makefile deleted file mode 100644 index 8e5403e..0000000 --- a/makefile +++ /dev/null @@ -1,79 +0,0 @@ -BIN_DIR := bin -OUT_TARGET := $(BIN_DIR)/regxstr -LIB_TARGET := $(BIN_DIR)/libregxstr.a -SO_TARGET := $(BIN_DIR)/libregxstr.so -INC_TARGET := regxstring.h - -INSTALL_OUT_DIR := /usr/local/bin -INSTALL_LIB_DIR := /usr/lib -INSTALL_INC_DIR := /usr/include - -DEBUG := -g -O0 -DTEST -#RELEASE := -O2 -DNDEBUG -CXXFLAGS := -Wall -fPIC $(DEBUG) $(RELEASE) -ARFLAGS := cr -LIB := /usr/lib/libpcre.a -CP := cp -f - -SRC := $(wildcard *.cpp) -OBJ := $(SRC:.cpp=.o) -DEP := $(OBJ:.o=.d) -HEADER := $(wildcard *.h) - -CXXFLAGS+=-MD - -all : out lib so - @$(CP) $(INC_TARGET) $(BIN_DIR) - -install : - $(CP) $(OUT_TARGET) $(INSTALL_OUT_DIR) - $(CP) $(LIB_TARGET) $(SO_TARGET) $(INSTALL_LIB_DIR) - $(CP) $(INC_TARGET) $(INSTALL_INC_DIR) - -uninstall : - $(RM) $(INSTALL_OUT_DIR)/$(notdir $(OUT_TARGET)) - $(RM) $(INSTALL_LIB_DIR)/$(notdir $(LIB_TARGET)) - $(RM) $(INSTALL_LIB_DIR)/$(notdir $(SO_TARGET)) - $(RM) $(INSTALL_INC_DIR)/$(INC_TARGET) - -out : $(OUT_TARGET) - -lib : $(LIB_TARGET) - -so : $(SO_TARGET) - -$(OUT_TARGET) : $(OBJ) - $(CXX) -o $@ $^ $(LIB) - -$(LIB_TARGET) : $(OBJ) - $(AR) $(ARFLAGS) $@ $^ - -$(SO_TARGET) : $(OBJ) - $(CXX) -shared -fPIC -o $@ $^ - -cleandist : - $(RM) *.o - -clean : cleandist - $(RM) *.d $(BIN_DIR)/* - -love : clean all - -lines : - @echo $(HEADER) $(SRC) | xargs wc -l - -.PHONY : all install uninstall out lib so cleandist clean love lines - -ifneq (${MAKECMDGOALS},install) -ifneq (${MAKECMDGOALS},uninstall) -ifneq (${MAKECMDGOALS},clean) -ifneq (${MAKECMDGOALS},cleandist) -ifneq (${MAKECMDGOALS},love) -ifneq (${MAKECMDGOALS},lines) -sinclude $(DEP) -endif -endif -endif -endif -endif -endif diff --git a/makefile.release b/makefile.release deleted file mode 100644 index e59e7d1..0000000 --- a/makefile.release +++ /dev/null @@ -1,79 +0,0 @@ -BIN_DIR := bin -OUT_TARGET := $(BIN_DIR)/regxstr -LIB_TARGET := $(BIN_DIR)/libregxstr.a -SO_TARGET := $(BIN_DIR)/libregxstr.so -INC_TARGET := regxstring.h - -INSTALL_OUT_DIR := /usr/local/bin -INSTALL_LIB_DIR := /usr/lib -INSTALL_INC_DIR := /usr/include - -#DEBUG := -g -O0 -DTEST -RELEASE := -O2 -DNDEBUG -CXXFLAGS := -Wall -fPIC $(DEBUG) $(RELEASE) -ARFLAGS := cr -LIB := -CP := cp -f - -SRC := $(wildcard *.cpp) -OBJ := $(SRC:.cpp=.o) -DEP := $(OBJ:.o=.d) -HEADER := $(wildcard *.h) - -CXXFLAGS+=-MD - -all : out lib so - @$(CP) $(INC_TARGET) $(BIN_DIR) - -install : - $(CP) $(OUT_TARGET) $(INSTALL_OUT_DIR) - $(CP) $(LIB_TARGET) $(SO_TARGET) $(INSTALL_LIB_DIR) - $(CP) $(INC_TARGET) $(INSTALL_INC_DIR) - -uninstall : - $(RM) $(INSTALL_OUT_DIR)/$(notdir $(OUT_TARGET)) - $(RM) $(INSTALL_LIB_DIR)/$(notdir $(LIB_TARGET)) - $(RM) $(INSTALL_LIB_DIR)/$(notdir $(SO_TARGET)) - $(RM) $(INSTALL_INC_DIR)/$(INC_TARGET) - -out : $(OUT_TARGET) - -lib : $(LIB_TARGET) - -so : $(SO_TARGET) - -$(OUT_TARGET) : $(OBJ) - $(CXX) -o $@ $^ $(LIB) - -$(LIB_TARGET) : $(OBJ) - $(AR) $(ARFLAGS) $@ $^ - -$(SO_TARGET) : $(OBJ) - $(CXX) -shared -fPIC -o $@ $^ - -cleandist : - $(RM) *.o - -clean : cleandist - $(RM) *.d $(BIN_DIR)/* - -love : clean all - -lines : - @echo $(HEADER) $(SRC) | xargs wc -l - -.PHONY : all install uninstall out lib so cleandist clean love lines - -ifneq (${MAKECMDGOALS},install) -ifneq (${MAKECMDGOALS},uninstall) -ifneq (${MAKECMDGOALS},clean) -ifneq (${MAKECMDGOALS},cleandist) -ifneq (${MAKECMDGOALS},love) -ifneq (${MAKECMDGOALS},lines) -sinclude $(DEP) -endif -endif -endif -endif -endif -endif diff --git a/pcre1 b/pcre1 new file mode 160000 index 0000000..9b20c2b --- /dev/null +++ b/pcre1 @@ -0,0 +1 @@ +Subproject commit 9b20c2b026cc953ae61c36322a3576fb6f2fde4a diff --git a/regxstr.entitlements b/regxstr.entitlements new file mode 100644 index 0000000..8cc185a --- /dev/null +++ b/regxstr.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.disable-library-validation + + + diff --git a/regxstring_impl.h b/regxstring_impl.h index 2f15700..e858dc2 100644 --- a/regxstring_impl.h +++ b/regxstring_impl.h @@ -9,7 +9,9 @@ #define _DZ_DEBUG 0 +#ifndef _MEM_LEAK #define _MEM_LEAK 0 +#endif //allocator choice #ifndef __GNUC__ From 20c2a447d69612dc229243f971580d8a43a2730d Mon Sep 17 00:00:00 2001 From: Pierce Brooks Date: Sun, 5 Apr 2026 16:35:51 -0400 Subject: [PATCH 2/3] conditionalize binary target --- CMakeLists.txt | 60 ++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e41dbe7..dafcaf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -165,36 +165,38 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") list(APPEND REGXSTR_BIN_SRC ${CMAKE_CURRENT_LIST_DIR}/test.h) endif() -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 $ || :) - 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 $ || :) - 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() - add_custom_command(TARGET regxstr POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath "@executable_path/" $ || :) - 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 $ || :) - if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED") - add_custom_command(TARGET regxstr POST_BUILD COMMAND codesign --sign "${REGXSTR_CODESIGNING}" --force --verbose --timestamp --deep $ || :) + 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 $ || :) + 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 $ || :) + endif() + endif() + add_custom_command(TARGET regxstr POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath "@executable_path/" $ || :) + 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 $ || :) + if ("${REGXSTR_LINKAGE}" STREQUAL "SHARED") + add_custom_command(TARGET regxstr POST_BUILD COMMAND codesign --sign "${REGXSTR_CODESIGNING}" --force --verbose --timestamp --deep $ || :) + endif() endif() endif() endif() From 10730f8988bca1b6d621977602f9bafbc4e80779 Mon Sep 17 00:00:00 2001 From: Pierce Brooks Date: Sun, 5 Apr 2026 17:08:15 -0400 Subject: [PATCH 3/3] release build distinctions --- CMakeLists.txt | 16 +++++++++++----- main.cpp | 4 ++++ regxstring_impl.h | 2 +- test.h | 12 +++++++++--- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dafcaf7..308c740 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,10 +117,12 @@ else() list(APPEND REGXSTR_DEF REGXSTR_ENDIANNESS_LITTLE) endif() -add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/pcre1) - include_directories(${CMAKE_CURRENT_LIST_DIR}) -include_directories(${PROJECT_BINARY_DIR}/pcre1) + +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) @@ -140,7 +142,9 @@ 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}) -add_dependencies(libregxstr pcre) +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() @@ -148,7 +152,9 @@ else() endif() target_compile_features(libregxstr PRIVATE cxx_std_17) set_target_properties(libregxstr PROPERTIES LINKER_LANGUAGE CXX) -target_link_libraries(libregxstr PRIVATE pcre pcreposix pcrecpp) +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) diff --git a/main.cpp b/main.cpp index d84f79e..5c92f5e 100644 --- a/main.cpp +++ b/main.cpp @@ -106,6 +106,10 @@ int main(int argc,const char ** argv) ExtractArg(argv[i],"?",ret) || ExtractArg(argv[i],"--help",ret)) && !ret) { +#ifdef TEST + if(test) + test_pcre(c); +#endif printUsage(ProgramName(argv[0])); return 1; }else if((ExtractArg(argv[i],"-t",ret) || ExtractArg(argv[i],"-test",ret)) && !ret){ diff --git a/regxstring_impl.h b/regxstring_impl.h index e858dc2..c19d430 100644 --- a/regxstring_impl.h +++ b/regxstring_impl.h @@ -14,7 +14,7 @@ #endif //allocator choice -#ifndef __GNUC__ +#if !defined(__GNUC__) || (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4)) || (defined(__clang_major__) && __clang_major__ >= 5) # define __DZ_ALLOC std::allocator #else # ifndef NDEBUG diff --git a/test.h b/test.h index 1aee3fb..3e5cf3d 100644 --- a/test.h +++ b/test.h @@ -75,17 +75,23 @@ static void test_pcre(int c) CRegxString regxstr; std::string regx; while(std::getline(cin,regx)){ + if (regx.empty()){ + continue; + } regx = pre_handle(regx); - cout<<"Test regx : "<