From 080fd7ab93f4f5c7c718414f518ee2af6306da2e Mon Sep 17 00:00:00 2001 From: Nat! Date: Sat, 16 Nov 2024 22:52:10 +0100 Subject: [PATCH] feat: improve build system and environment handling * Enhance CMake configuration and build - Add OBJC_TAO_DEBUG_ENABLED option for debug builds - Update library linking with WHOLE_ARCHIVE support - Fix paths to use CMAKE_CURRENT_SOURCE_DIR consistently - Add config template for package installation * Update VSCode integration - Use environment variables for include paths - Update debug configuration paths - Improve IntelliSense settings * Environment and workflow improvements - Update GitHub Actions to use checkout@v4 - Add workflow_dispatch support - Fix environment plugin handling - Update environment version to 5.3.0 * Other improvements - Enable include.h and include-private.h conditionals - Update trace environment variable name - Fix project version handling - Add mulle-clang-project dependency --- .github/workflows/dockerfile-ci.yml | 2 +- .github/workflows/mulle-sde-ci.yml | 4 +- .mulle/etc/project/formula-info.sh | 4 +- .mulle/share/env/environment-plugin.sh | 2 +- .mulle/share/env/environment.sh | 27 ++++--- .mulle/share/env/include-environment.sh | 2 + .mulle/share/env/tool-plugin | 2 +- .mulle/share/env/version | 2 +- .../sde/version/mulle-sde/extension-cmake | 2 +- CMakeLists.txt | 4 +- CMakePackage.cmake | 4 +- Dockerfile | 4 +- .../all/.github/workflows/mulle-sde-ci.yml | 6 +- src/mulle-objc/github-actions/version | 2 +- .../all/cmake/share/CompilerFlagsObjC.cmake | 13 ++- .../all/cmake/share/CreateLoaderIncObjC.cmake | 9 +-- .../all/cmake/share/ExecutableObjC.cmake | 1 + .../project/all/cmake/share/LibraryObjC.cmake | 21 +++++ .../all/cmake/share/OptimizedLinkObjC.cmake | 22 ++--- .../cmake/share/PROJECT_MAKE-config.cmake.in | 80 +++++++++++++++++++ src/mulle-objc/objc-cmake/version | 2 +- .../PROJECT_SOURCE_DIR/main.PROJECT_EXTENSION | 2 +- src/mulle-objc/objc-demo/version | 2 +- .../generic/import-private.h | 11 ++- .../all/PROJECT_SOURCE_DIR/generic/import.h | 11 ++- src/mulle-objc/objc/version | 2 +- .../project/all/.vscode/c_cpp_properties.json | 18 ++--- .../all/.vscode/c_cpp_properties.json | 12 +-- .../subproject/all/.vscode/launch.json | 6 +- src/mulle-objc/vscode-clang/version | 2 +- 30 files changed, 198 insertions(+), 83 deletions(-) create mode 100644 src/mulle-objc/objc-cmake/project/all/cmake/share/LibraryObjC.cmake create mode 100644 src/mulle-objc/objc-cmake/project/all/cmake/share/PROJECT_MAKE-config.cmake.in diff --git a/.github/workflows/dockerfile-ci.yml b/.github/workflows/dockerfile-ci.yml index c800398..90eb3fd 100644 --- a/.github/workflows/dockerfile-ci.yml +++ b/.github/workflows/dockerfile-ci.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 if: ${{ ! env.ACT }} - name: Build Docker image diff --git a/.github/workflows/mulle-sde-ci.yml b/.github/workflows/mulle-sde-ci.yml index f7ce833..7df6ee2 100644 --- a/.github/workflows/mulle-sde-ci.yml +++ b/.github/workflows/mulle-sde-ci.yml @@ -27,11 +27,11 @@ jobs: - name: Dump Environment run: env | sort - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: mulle-sde/github-ci@v1 - - uses: mulle-cc/github-ci@v4 + - uses: mulle-cc/github-ci@v5 - name: List extensions run: | diff --git a/.mulle/etc/project/formula-info.sh b/.mulle/etc/project/formula-info.sh index 72a563d..340a90f 100755 --- a/.mulle/etc/project/formula-info.sh +++ b/.mulle/etc/project/formula-info.sh @@ -16,6 +16,8 @@ DESC="🎩 mulle-objc developer kit for mulle-sde" # DEPENDENCIES and BUILD_DEPENDENCIES will be evaled later! # So keep them single quoted. # -DEPENDENCIES='${MULLE_C_TAP}mulle-c-developer' +DEPENDENCIES='${MULLE_C_TAP}mulle-c-developer +${MULLE_KYBERNETIK_TAP}/mulle-clang-project' + DEBIAN_DEPENDENCIES='mulle-c-developer' diff --git a/.mulle/share/env/environment-plugin.sh b/.mulle/share/env/environment-plugin.sh index 89a692f..e35d3a2 100644 --- a/.mulle/share/env/environment-plugin.sh +++ b/.mulle/share/env/environment-plugin.sh @@ -22,6 +22,6 @@ export MULLE_SOURCETREE_SYMLINK='YES' # # # -export MULLE_SDE_INSTALLED_VERSION="3.0.0" +export MULLE_SDE_INSTALLED_VERSION="3.2.0" diff --git a/.mulle/share/env/environment.sh b/.mulle/share/env/environment.sh index c985991..a859bc2 100644 --- a/.mulle/share/env/environment.sh +++ b/.mulle/share/env/environment.sh @@ -41,7 +41,7 @@ case "${MULLE_SHELL_MODE}" in ;; *\\h*) - PS1="$(sed 's/\\h/\\h\['${envname}'\]/' <<< "${PS1}" )" + PS1="$( PATH=/bin:/usr/bin sed 's/\\h/\\h\['${envname}'\]/' <<< "${PS1}" )" ;; *) @@ -82,7 +82,7 @@ case "${MULLE_SHELL_MODE}" in unset FILENAME vardir="${MULLE_VIRTUAL_ROOT}/.mulle/var/${MULLE_HOSTNAME:-unknown-host}" - [ -d "${vardir}" ] || mkdir -p "${vardir}" + [ -d "${vardir}" ] || PATH=/bin:/usr/bin mkdir -p "${vardir}" HISTFILE="${vardir}/bash_history" export HISTFILE @@ -117,37 +117,38 @@ unset TRACE case "${MULLE_SHELL_MODE}" in *INTERACTIVE*) - if [ -z "" ] + if [ -z "${MULLE_SDE_NO_ALIAS}" ] then - alias craftorder="mulle-sde craftorder" alias clean="mulle-sde clean" alias craft="mulle-sde craft" + alias craftorder="mulle-sde craftorder" alias dependency="mulle-sde dependency" alias environment="mulle-sde environment" alias extension="mulle-sde extension" alias fetch="mulle-sde fetch" - alias show="mulle-sde show" - alias list="mulle-sde list" alias library="mulle-sde library" + alias list="mulle-sde list" alias log="mulle-sde log" alias match="mulle-sde match" alias monitor="mulle-sde monitor" - alias reflect="mulle-sde reflect" alias patternfile="mulle-sde patternfile" + alias reflect="mulle-sde reflect" + alias run="mulle-sde run" + alias show="mulle-sde show" alias subproject="mulle-sde subproject" fi - if [ -z "" ] + if [ -z "${MULLE_SDE_NO_QUICK_ALIAS}" ] then - alias c="mulle-sde craft" alias C="mulle-sde clean; mulle-sde craft" + alias c="mulle-sde craft" alias CC="mulle-sde clean all; mulle-sde craft" - alias t="mulle-sde test rerun --serial" - alias tt="mulle-sde test craft ; mulle-sde test rerun --serial" + alias l="mulle-sde list --files" + alias r="mulle-sde reflect" alias T="mulle-sde test craft ; mulle-sde test" + alias t="mulle-sde test rerun --serial" alias TT="mulle-sde test clean all; mulle-sde test" - alias r="mulle-sde reflect" - alias l="mulle-sde list --files" + alias tt="mulle-sde test craft ; mulle-sde test rerun --serial" fi ;; esac diff --git a/.mulle/share/env/include-environment.sh b/.mulle/share/env/include-environment.sh index decbf1f..9f5d375 100644 --- a/.mulle/share/env/include-environment.sh +++ b/.mulle/share/env/include-environment.sh @@ -26,6 +26,8 @@ e:global;40 e:os-${MULLE_UNAME};60 e:host-${MULLE_HOSTNAME};80 e:user-${MULLE_USERNAME};100 +e:user-${MULLE_USERNAME}-os-${MULLE_UNAME};120 +e:user-${MULLE_USERNAME}-host-${MULLE_HOSTNAME};140 e:custom;1000 e:post-global;2000" diff --git a/.mulle/share/env/tool-plugin b/.mulle/share/env/tool-plugin index da5adfe..e6594fb 100644 --- a/.mulle/share/env/tool-plugin +++ b/.mulle/share/env/tool-plugin @@ -41,7 +41,6 @@ make mkdir;required mknod more -more;required mount mulle-column mv;required @@ -67,6 +66,7 @@ tail;required tee;required test;required touch;required +tree tr;required true;required tty diff --git a/.mulle/share/env/version b/.mulle/share/env/version index 91ff572..03f488b 100644 --- a/.mulle/share/env/version +++ b/.mulle/share/env/version @@ -1 +1 @@ -5.2.0 +5.3.0 diff --git a/.mulle/share/sde/version/mulle-sde/extension-cmake b/.mulle/share/sde/version/mulle-sde/extension-cmake index d21d277..697f087 100644 --- a/.mulle/share/sde/version/mulle-sde/extension-cmake +++ b/.mulle/share/sde/version/mulle-sde/extension-cmake @@ -1 +1 @@ -0.25.0 +0.28.0 diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a9227c..0b69b3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required( VERSION 3.14) -project( mulle-objc-developer NONE) +project( mulle-objc-developer VERSION 0.27.0 LANGUAGES NONE) -set( PROJECT_VERSION 0.26.1) +set( PROJECT_VERSION 0.27.0) if( APPLE) diff --git a/CMakePackage.cmake b/CMakePackage.cmake index d5df41f..ea1fcbb 100644 --- a/CMakePackage.cmake +++ b/CMakePackage.cmake @@ -6,9 +6,9 @@ set( CPACK_PACKAGE_NAME "${PROJECT_NAME}") set( CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") set( CPACK_PACKAGE_CONTACT "nat@mulle-kybernetik.de") -set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md") +set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "🎩 mulle-objc developer kit for mulle-sde") -set( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") +set( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set( CPACK_STRIP_FILES false) diff --git a/Dockerfile b/Dockerfile index 58c4c13..5a37944 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,6 +28,6 @@ RUN DEBIAN_FRONTEND=noninteractive \ && chmod 755 installer-all \ && ./installer-all /usr no \ \ - && wget "https://github.com/mulle-cc/mulle-clang-project/releases/download/17.0.6.0/mulle-clang-17.0.6.0-bookworm-amd64.deb" \ - && dpkg --install "mulle-clang-17.0.6.0-bookworm-amd64.deb" + && wget "https://github.com/mulle-cc/mulle-clang-project/releases/download/17.0.6.2/mulle-clang-17.0.6.2-bookworm-amd64.deb" \ + && dpkg --install "mulle-clang-17.0.6.2-bookworm-amd64.deb" diff --git a/src/mulle-objc/github-actions/project/all/.github/workflows/mulle-sde-ci.yml b/src/mulle-objc/github-actions/project/all/.github/workflows/mulle-sde-ci.yml index 7ea9f56..2d0b7d8 100644 --- a/src/mulle-objc/github-actions/project/all/.github/workflows/mulle-sde-ci.yml +++ b/src/mulle-objc/github-actions/project/all/.github/workflows/mulle-sde-ci.yml @@ -3,7 +3,7 @@ name: CI on: push: branches: - - release + - master pull_request: workflow_dispatch: @@ -33,11 +33,11 @@ jobs: - name: Dump Environment run: env | sort - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: mulle-sde/github-ci@v1 - - uses: mulle-cc/github-ci@v4 + - uses: mulle-cc/github-ci@v5 - name: Dump Project Environment run: | diff --git a/src/mulle-objc/github-actions/version b/src/mulle-objc/github-actions/version index 4e8f395..1b58cc1 100644 --- a/src/mulle-objc/github-actions/version +++ b/src/mulle-objc/github-actions/version @@ -1 +1 @@ -0.26.0 +0.27.0 diff --git a/src/mulle-objc/objc-cmake/project/all/cmake/share/CompilerFlagsObjC.cmake b/src/mulle-objc/objc-cmake/project/all/cmake/share/CompilerFlagsObjC.cmake index f532791..1640790 100644 --- a/src/mulle-objc/objc-cmake/project/all/cmake/share/CompilerFlagsObjC.cmake +++ b/src/mulle-objc/objc-cmake/project/all/cmake/share/CompilerFlagsObjC.cmake @@ -9,11 +9,22 @@ if( NOT __COMPILER_FLAGS_OBJC_CMAKE__) message( STATUS "# Include \"${CMAKE_CURRENT_LIST_FILE}\"" ) endif() + # + # only useful in mulle-objc + # + option( OBJC_TAO_DEBUG_ENABLED "Enable Objective-C TAO for debug builds" MULLE_OBJC) + set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OTHER_OBJC_FLAGS} ${UNWANTED_OBJC_WARNINGS}") set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OTHER_OBJC_FLAGS} ${UNWANTED_OBJC_WARNINGS}") if( CMAKE_BUILD_TYPE) - if( NOT TMP_CONFIGURATION_NAME STREQUAL "DEBUG") + string( TOUPPER "${CMAKE_BUILD_TYPE}" TMP_CONFIGURATION_NAME) + if( TMP_CONFIGURATION_NAME STREQUAL "DEBUG") + if( OBJC_TAO_DEBUG_ENABLED) + message( STATUS "Objective-C TAO enabled") + add_definitions( "-fobjc-tao") + endif() + else() add_definitions( "-DNS_BLOCK_ASSERTIONS" ) endif() endif() diff --git a/src/mulle-objc/objc-cmake/project/all/cmake/share/CreateLoaderIncObjC.cmake b/src/mulle-objc/objc-cmake/project/all/cmake/share/CreateLoaderIncObjC.cmake index a75e5a9..155a459 100644 --- a/src/mulle-objc/objc-cmake/project/all/cmake/share/CreateLoaderIncObjC.cmake +++ b/src/mulle-objc/objc-cmake/project/all/cmake/share/CreateLoaderIncObjC.cmake @@ -20,7 +20,7 @@ if( NOT LIBRARY_NAME) endif() if( NOT OBJC_LOADER_INC) - set( OBJC_LOADER_INC "${CMAKE_SOURCE_DIR}/<|PROJECT_SOURCE_DIR|>/reflect/objc-loader.inc") + set( OBJC_LOADER_INC "${CMAKE_CURRENT_SOURCE_DIR}/<|PROJECT_SOURCE_DIR|>/reflect/objc-loader.inc") endif() # @@ -150,15 +150,15 @@ if( CREATE_OBJC_LOADER_INC) # PROPERTIES GENERATED FALSE # ) - add_custom_target( "__objc_loader_inc__" + add_custom_target( "${LIBRARY_NAME}__objc_loader_inc__" DEPENDS ${OBJC_LOADER_INC} COMMENT "Target to build \"${OBJC_LOADER_INC}\"" ) if( TARGET "_2_${LIBRARY_NAME}") - add_dependencies( "_2_${LIBRARY_NAME}" "__objc_loader_inc__") + add_dependencies( "_2_${LIBRARY_NAME}" "${LIBRARY_NAME}__objc_loader_inc__") else() - add_dependencies( "${LIBRARY_NAME}" "__objc_loader_inc__") + add_dependencies( "${LIBRARY_NAME}" "${LIBRARY_NAME}__objc_loader_inc__") endif() # seemingly needed @@ -168,6 +168,5 @@ if( CREATE_OBJC_LOADER_INC) endif() - include( CreateLoaderIncAuxObjC OPTIONAL) diff --git a/src/mulle-objc/objc-cmake/project/all/cmake/share/ExecutableObjC.cmake b/src/mulle-objc/objc-cmake/project/all/cmake/share/ExecutableObjC.cmake index 1d47298..405df12 100644 --- a/src/mulle-objc/objc-cmake/project/all/cmake/share/ExecutableObjC.cmake +++ b/src/mulle-objc/objc-cmake/project/all/cmake/share/ExecutableObjC.cmake @@ -25,6 +25,7 @@ set_target_properties( "${EXECUTABLE_NAME}" # # only for mulle-clang +# consider: set_target_properties(your_target PROPERTIES ENABLE_EXPORTS ON) # if( UNIX AND NOT (APPLE OR COSMOPOLITAN OR MUSL_STATIC_ONLY)) if( LINK_PHASE) diff --git a/src/mulle-objc/objc-cmake/project/all/cmake/share/LibraryObjC.cmake b/src/mulle-objc/objc-cmake/project/all/cmake/share/LibraryObjC.cmake new file mode 100644 index 0000000..1dfce89 --- /dev/null +++ b/src/mulle-objc/objc-cmake/project/all/cmake/share/LibraryObjC.cmake @@ -0,0 +1,21 @@ +### If you want to edit this, copy it from cmake/share to cmake. It will be +### picked up in preference over the one in cmake/share. And it will not get +### clobbered with the next upgrade. + +# can be included multiple times + + +if( MULLE_TRACE_INCLUDE) + message( STATUS "# Include \"${CMAKE_CURRENT_LIST_FILE}\"" ) +endif() + +# +# the idea here is that this propagates up to the main project, if +# this project is added to another with add_subdirectory +# +# In your library's main CMakeLists.txt +if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.24") + target_link_options( ${LIBRARY_NAME} INTERFACE "$") +endif() + +include( LibraryAuxObjC OPTIONAL) diff --git a/src/mulle-objc/objc-cmake/project/all/cmake/share/OptimizedLinkObjC.cmake b/src/mulle-objc/objc-cmake/project/all/cmake/share/OptimizedLinkObjC.cmake index f63dd17..071a0df 100644 --- a/src/mulle-objc/objc-cmake/project/all/cmake/share/OptimizedLinkObjC.cmake +++ b/src/mulle-objc/objc-cmake/project/all/cmake/share/OptimizedLinkObjC.cmake @@ -35,16 +35,16 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__) # NORMAL_LOAD_LIBRARY # regular link this # if( NOT COVERAGE_DIR) - set( COVERAGE_DIR "${PROJECT_SOURCE_DIR}/coverage") + set( COVERAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/coverage") endif() if( NOT OPTIMIZE_DIR) - set( OPTIMIZE_DIR "${PROJECT_BINARY_DIR}/mulle-objc-optimize/optimize.d") + set( OPTIMIZE_DIR "${CMAKE_CURRENT_BINARY_DIR}/mulle-objc-optimize/optimize.d") endif() if( NOT OPTIMIZE_INFO_DIR) - set( OPTIMIZE_INFO_DIR "${PROJECT_SOURCE_DIR}/optimize") + set( OPTIMIZE_INFO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/optimize") endif() if( NOT UNARCHIVE_DIR) - set( UNARCHIVE_DIR "${PROJECT_BINARY_DIR}/mulle-objc-optimize/unarchive.d") + set( UNARCHIVE_DIR "${CMAKE_CURRENT_BINARY_DIR}/mulle-objc-optimize/unarchive.d") endif() if( NOT EXISTS "${COVERAGE_DIR}/method-coverage.csv") @@ -65,11 +65,11 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__) message( STATUS "OPTIMIZE_INFO_DIR is ${OPTIMIZE_INFO_DIR}") message( STATUS "UNARCHIVE_DIR is ${UNARCHIVE_DIR}") message( STATUS "DEPENDENCY_DIR is ${MULLE_SDK_DEPENDENCY_DIR}") - message( STATUS "PROJECT_BINARY_DIR is ${PROJECT_BINARY_DIR}") + message( STATUS "CMAKE_CURRENT_BINARY_DIR is ${CMAKE_CURRENT_BINARY_DIR}") set( CUSTOM_OUTPUT - "${PROJECT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}" - "${PROJECT_BINARY_DIR}/${ALL_LOAD_NAME}" + "${CMAKE_CURRENT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}" + "${CMAKE_CURRENT_BINARY_DIR}/${ALL_LOAD_NAME}" ) if( MSVC) @@ -98,7 +98,7 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__) --dependency-dir "${MULLE_SDK_DEPENDENCY_DIR}" --optimize-info-dir "${OPTIMIZE_INFO_DIR}" --optimize-dir "${OPTIMIZE_DIR}" - --prefix "${PROJECT_BINARY_DIR}" + --prefix "${CMAKE_CURRENT_BINARY_DIR}" --unarchive-dir "${UNARCHIVE_DIR}" ${ALL_LOAD_DEPENDENCY_LIBRARIES} DEPENDS ${ALL_LOAD_DEPENDENCY_LIBRARIES} @@ -112,7 +112,7 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__) # replace ALL_LOAD_DEPENDENCY_LIBRARIES with the non-optimzable stuff set( ALL_LOAD_DEPENDENCY_LIBRARIES - "${PROJECT_BINARY_DIR}/${ALL_LOAD_NAME}" + "${CMAKE_CURRENT_BINARY_DIR}/${ALL_LOAD_NAME}" ) # @@ -120,9 +120,9 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__) # to pick up regular C symbols # set( DEPENDENCY_LIBRARIES - "${PROJECT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}" + "${CMAKE_CURRENT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}" ${DEPENDENCY_LIBRARIES} - "${PROJECT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}" + "${CMAKE_CURRENT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}" ) add_dependencies( ${LIBRARY_NAME} "_${LIBRARY_NAME}_optimized_libraries") diff --git a/src/mulle-objc/objc-cmake/project/all/cmake/share/PROJECT_MAKE-config.cmake.in b/src/mulle-objc/objc-cmake/project/all/cmake/share/PROJECT_MAKE-config.cmake.in new file mode 100644 index 0000000..f1a0afc --- /dev/null +++ b/src/mulle-objc/objc-cmake/project/all/cmake/share/PROJECT_MAKE-config.cmake.in @@ -0,0 +1,80 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") + +# +# Work in progress +# + +if( CMAKE_BUILD_TYPE) + string( TOUPPER "${CMAKE_BUILD_TYPE}" TMP_CONFIGURATION_NAME) + if( NOT TMP_CONFIGURATION_NAME STREQUAL "DEBUG") + add_definitions( "-DNDEBUG" ) + add_definitions( "-DNS_BLOCK_ASSERTIONS" ) + endif() +endif() + +if( BUILD_SHARED_LIBS) + add_definitions( "-DMULLE_INCLUDE_DYNAMIC=1") +endif() + + +if( NOT DEFINED CMAKE_C_LINK_GROUP_USING_WHOLE_ARCHIVE_SUPPORTED) + set(CMAKE_C_LINK_GROUP_USING_WHOLE_ARCHIVE_SUPPORTED ON) + set(CMAKE_CXX_LINK_GROUP_USING_WHOLE_ARCHIVE_SUPPORTED ON) + + if(APPLE) + set(CMAKE_C_LINK_GROUP_USING_WHOLE_ARCHIVE + "LINKER:-force_load" + "" + ) + set(CMAKE_CXX_LINK_GROUP_USING_WHOLE_ARCHIVE + "LINKER:-force_load" + "" + ) + else() + if( WIN32) + set(CMAKE_C_LINK_GROUP_USING_WHOLE_ARCHIVE + "LINKER:-WHOLEARCHIVE:" + "" + ) + set(CMAKE_CXX_LINK_GROUP_USING_WHOLE_ARCHIVE + "LINKER:-WHOLEARCHIVE:" + "" + ) + else() + set(CMAKE_C_LINK_GROUP_USING_WHOLE_ARCHIVE + "LINKER:--whole-archive;LINKER:--no-as-needed" + "LINKER:--as-needed;LINKER:--no-whole-archive" + ) + set(CMAKE_CXX_LINK_GROUP_USING_WHOLE_ARCHIVE + "LINKER:--whole-archive;LINKER:--no-as-needed" + "LINKER:--as-needed;LINKER:--no-whole-archive" + ) + endif() + endif() +endif() + + +# +# only for mulle-clang +# consider: set_target_properties(your_target PROPERTIES ENABLE_EXPORTS ON) +# +if( UNIX AND NOT (APPLE OR COSMOPOLITAN OR MUSL_STATIC_ONLY)) + add_link_options( "SHELL:LINKER:--export-dynamic") +endif() + +if( APPLE) + add_link_options( "SHELL:LINKER:-exported_symbol,___register_mulle_objc_universe") + add_link_options( "SHELL:LINKER:-exported_symbol,__mulle_atinit") + add_link_options( "SHELL:LINKER:-exported_symbol,_mulle_atexit") +endif() + + +target_link_options( @PROJECT_NAME@ INTERFACE + "$" +) + +check_required_components(@PROJECT_NAME@) + + diff --git a/src/mulle-objc/objc-cmake/version b/src/mulle-objc/objc-cmake/version index 4e8f395..1b58cc1 100644 --- a/src/mulle-objc/objc-cmake/version +++ b/src/mulle-objc/objc-cmake/version @@ -1 +1 @@ -0.26.0 +0.27.0 diff --git a/src/mulle-objc/objc-demo/demo/executable/PROJECT_SOURCE_DIR/main.PROJECT_EXTENSION b/src/mulle-objc/objc-demo/demo/executable/PROJECT_SOURCE_DIR/main.PROJECT_EXTENSION index b2ad0dc..57e58c9 100644 --- a/src/mulle-objc/objc-demo/demo/executable/PROJECT_SOURCE_DIR/main.PROJECT_EXTENSION +++ b/src/mulle-objc/objc-demo/demo/executable/PROJECT_SOURCE_DIR/main.PROJECT_EXTENSION @@ -52,7 +52,7 @@ int main( int argc, char *argv[]) * * To easier pin down, where a leak is created. try any of: * - * MULLE_TESTALLOCATOR_TRACE=3 + * MULLE_TESTALLOCATOR=3 * MULLE_OBJC_TRACE_INSTANCE=YES * MULLE_OBJC_TRACE_METHOD_CALL=YES * MULLE_OBJC_TRACE_UNIVERSE=YES diff --git a/src/mulle-objc/objc-demo/version b/src/mulle-objc/objc-demo/version index 4e8f395..1b58cc1 100644 --- a/src/mulle-objc/objc-demo/version +++ b/src/mulle-objc/objc-demo/version @@ -1 +1 @@ -0.26.0 +0.27.0 diff --git a/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import-private.h b/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import-private.h index 5e9d424..42bd3c7 100644 --- a/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import-private.h +++ b/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import-private.h @@ -12,13 +12,12 @@ * Get C includes first, if any. As include-private.h is a generic name, * testing could pick up the wrong one, so we test for inferior header * that we assume to be there if "include-private.h" were to exist. - * - * #ifdef __has_include - * # if __has_include( "_<|PROJECT_NAME|>-include-private.h") - * # include "include-private.h" - * # endif - * #endif */ +#ifdef __has_include +# if __has_include( "_<|PROJECT_NAME|>-include-private.h") +# include "include-private.h" +# endif +#endif #import "import.h" diff --git a/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import.h b/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import.h index 2d872b5..cabe8e7 100644 --- a/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import.h +++ b/src/mulle-objc/objc/project-oneshot/all/PROJECT_SOURCE_DIR/generic/import.h @@ -18,13 +18,12 @@ * Get C includes first. As "include.h" is a generic name, * testing could pick up the wrong one, so we test for an inferior header * that we assume to be there if "include.h" were to exist. - * - * #ifdef __has_include - * # if __has_include( "_<|PROJECT_NAME|>-include.h") - * # include "include.h" - * # endif - * #endif */ +#ifdef __has_include +# if __has_include( "_<|PROJECT_NAME|>-include.h") +# include "include.h" +# endif +#endif #ifndef <|PROJECT_UPCASE_IDENTIFIER|>_GLOBAL diff --git a/src/mulle-objc/objc/version b/src/mulle-objc/objc/version index 4e8f395..1b58cc1 100644 --- a/src/mulle-objc/objc/version +++ b/src/mulle-objc/objc/version @@ -1 +1 @@ -0.26.0 +0.27.0 diff --git a/src/mulle-objc/vscode-clang/project/all/.vscode/c_cpp_properties.json b/src/mulle-objc/vscode-clang/project/all/.vscode/c_cpp_properties.json index cea2fa9..5208730 100644 --- a/src/mulle-objc/vscode-clang/project/all/.vscode/c_cpp_properties.json +++ b/src/mulle-objc/vscode-clang/project/all/.vscode/c_cpp_properties.json @@ -5,40 +5,40 @@ "name": "Linux", "includePath": [ "${workspaceFolder}/src/**", - "${workspaceFolder}/dependency/include/**", - "${workspaceFolder}/addiction/include/**" + "${env:DEPENDENCY_DIR}/include/**", + "${env:ADDICTION_DIR}/include/**" ], "defines": [], "compilerPath": "mulle-clang", "cStandard": "c11", "intelliSenseMode": "clang-x64", - "compileCommands": "${workspaceFolder}/kitchen/Debug/compile_commands.json" + "compileCommands": "${env:KITCHEN_DIR}/Debug/compile_commands.json" }, { "name": "Mac", "includePath": [ "${workspaceFolder}/src/**", - "${workspaceFolder}/dependency/include/**", - "${workspaceFolder}/addiction/include/**" + "${env:DEPENDENCY_DIR}/include/**", + "${env:ADDICTION_DIR}/include/**" ], "defines": [], "compilerPath": "mulle-clang", "cStandard": "c11", "intelliSenseMode": "clang-x64", - "compileCommands": "${workspaceFolder}/kitchen/Debug/compile_commands.json" + "compileCommands": "${env:KITCHEN_DIR}/Debug/compile_commands.json" }, { "name": "Win32", "includePath": [ "${workspaceFolder}/src/**", - "${workspaceFolder}/dependency/include/**", - "${workspaceFolder}/addiction/include/**" + "${env:DEPENDENCY_DIR}/include/**", + "${env:ADDICTION_DIR}/include/**" ], "defines": [], "compilerPath": "mulle-clang-cl.exe", "cStandard": "c11", "intelliSenseMode": "clang-x64", - "compileCommands": "${workspaceFolder}/kitchen/Debug/compile_commands.json" + "compileCommands": "${env:KITCHEN_DIR}/Debug/compile_commands.json" } ] } diff --git a/src/mulle-objc/vscode-clang/subproject/all/.vscode/c_cpp_properties.json b/src/mulle-objc/vscode-clang/subproject/all/.vscode/c_cpp_properties.json index 0f1037b..982ff07 100644 --- a/src/mulle-objc/vscode-clang/subproject/all/.vscode/c_cpp_properties.json +++ b/src/mulle-objc/vscode-clang/subproject/all/.vscode/c_cpp_properties.json @@ -5,8 +5,8 @@ "name": "Linux", "includePath": [ "${workspaceFolder}/src/**", - "${workspaceFolder}/dependency/include/**", - "${workspaceFolder}/addiction/include/**" + "${env:DEPENDENCY_DIR}/include/**", + "${env:ADDICTION_DIR}/include/**" ], "defines": [], "compilerPath": "mulle-clang", @@ -17,8 +17,8 @@ "name": "Mac", "includePath": [ "${workspaceFolder}/src/**", - "${workspaceFolder}/dependency/include/**", - "${workspaceFolder}/addiction/include/**" + "${env:DEPENDENCY_DIR}/include/**", + "${env:ADDICTION_DIR}/include/**" ], "defines": [], "compilerPath": "mulle-clang", @@ -29,8 +29,8 @@ "name": "Win32", "includePath": [ "${workspaceFolder}/src/**", - "${workspaceFolder}/dependency/include/**", - "${workspaceFolder}/addiction/include/**" + "${env:DEPENDENCY_DIR}/include/**", + "${env:ADDICTION_DIR}/include/**" ], "defines": [], "compilerPath": "mulle-clang-cl.exe", diff --git a/src/mulle-objc/vscode-clang/subproject/all/.vscode/launch.json b/src/mulle-objc/vscode-clang/subproject/all/.vscode/launch.json index a37381a..a1e1ba0 100644 --- a/src/mulle-objc/vscode-clang/subproject/all/.vscode/launch.json +++ b/src/mulle-objc/vscode-clang/subproject/all/.vscode/launch.json @@ -7,15 +7,15 @@ "type": "cppdbg", "request": "launch", "stopAtEntry": true, - "program": "${workspaceFolder}/kitchen/Debug/<|PROJECT_NAME|>", + "program": "${env:KITCHEN_DIR}/Debug/<|PROJECT_NAME|>", "args": [], "environment": [], "cwd": "${workspaceFolder}", - "additionalSOLibSearchPath": "${workspaceFolder}/dependency/Debug/lib:${workspaceFolder}/dependency/lib", + "additionalSOLibSearchPath": "${env:DEPENDENCY_DIR}/Debug/lib:${env:DEPENDENCY_DIR}/lib", "windows": { "MIMode": "gdb", "miDebuggerPath": "mulle-gdb.exe", - "program": "${workspaceFolder}/kitchen/Debug/<|PROJECT_NAME|>.exe" + "program": "${env:KITCHEN_DIR}/Debug/<|PROJECT_NAME|>.exe" }, "osx": { "MIMode": "lldb", diff --git a/src/mulle-objc/vscode-clang/version b/src/mulle-objc/vscode-clang/version index 2094a10..1b58cc1 100644 --- a/src/mulle-objc/vscode-clang/version +++ b/src/mulle-objc/vscode-clang/version @@ -1 +1 @@ -0.24.0 +0.27.0