CMakeLists.txt | 70 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 15 deletions(-)
New commits: commit 152736981d5bb9e098c1a8b86fcf8fe577a4a9ec Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Sat May 13 21:32:56 2017 +0430 [cmake] Add framework build support (#484) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f6c3bad..b25cac0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,20 @@ cmake_minimum_required(VERSION 2.8.0) project(harfbuzz) + +## Limit framework build to Xcode generator +if (BUILD_FRAMEWORK) + # for a framework on macOS, use `cmake .. -DBUILD_FRAMEWORK:BOOL=true -G Xcode` + if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode") + message(FATAL_ERROR + "You should use Xcode generator with BUILD_FRAMEWORK enabled") + endif () + set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") + set(CMAKE_MACOSX_RPATH ON) + set(BUILD_SHARED_LIBS ON) +endif () + + ## Disallow in-source builds, as CMake generated make files can collide with autotools ones if (NOT MSVC AND "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") message(FATAL_ERROR @@ -55,7 +69,7 @@ if (WIN32 AND NOT MINGW AND BUILD_SHARED_LIBS) endif () -## Detect if cmake is in distribution or regular repository folder +## Detect if we are running inside a distribution or regular repository folder set(IN_HB_DIST FALSE) if (EXISTS "${PROJECT_SOURCE_DIR}/src/hb-version.h") # perhaps we are on dist directory @@ -112,8 +126,8 @@ set(HB_VERSION_MINOR ${CMAKE_MATCH_3}) set(HB_VERSION_MICRO ${CMAKE_MATCH_4}) +## Define ragel tasks if (NOT IN_HB_DIST) - ## Define ragel tasks find_program(RAGEL "ragel") if (RAGEL) @@ -133,21 +147,23 @@ if (NOT IN_HB_DIST) endforeach () mark_as_advanced(RAGEL) +endif () - ## Generate hb-version.h +## Generate hb-version.h +if (NOT IN_HB_DIST) set(HB_VERSION_H_IN "${PROJECT_SOURCE_DIR}/src/hb-version.h.in") set(HB_VERSION_H "${PROJECT_BINARY_DIR}/src/hb-version.h") set_source_files_properties("${HB_VERSION_H}" PROPERTIES GENERATED true) configure_file("${HB_VERSION_H_IN}" "${HB_VERSION_H}.tmp" @ONLY) execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${HB_VERSION_H}.tmp" - "${HB_VERSION_H}") + "${HB_VERSION_H}" + ) file(REMOVE "${HB_VERSION_H}.tmp") - - endif () + ## Define sources and headers of the project set(project_sources ${HB_BASE_sources} @@ -214,7 +230,8 @@ if (HB_BUILTIN_UCDN) list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-ucdn.cc - ${LIBHB_UCDN_sources}) + ${LIBHB_UCDN_sources} + ) endif () if (HB_HAVE_GLIB) @@ -329,6 +346,20 @@ add_library(harfbuzz ${project_sources} ${project_headers}) target_link_libraries(harfbuzz ${THIRD_PARTY_LIBS}) +## Additional framework build configs +if (BUILD_FRAMEWORK) + set(CMAKE_MACOSX_RPATH ON) + set_target_properties(harfbuzz PROPERTIES + FRAMEWORK TRUE + PUBLIC_HEADER "${project_headers}" + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" + ) + set(MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz") + set(MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}") + set(MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}") +endif () + + ## Additional harfbuzz build artifacts if (HB_BUILD_UTILS) # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindCairo.cmake @@ -365,5 +396,6 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin + FRAMEWORK DESTINATION Library/Frameworks ) endif () commit bf50ddaf2b416bd80ae8849593bc745b578193d9 Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Thu May 4 20:31:42 2017 +0430 [cmake] minor (#482) diff --git a/CMakeLists.txt b/CMakeLists.txt index 91e7eca0..5f6c3bad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 2.8.0) project(harfbuzz) -## Disallow in-source builds -if ("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") +## Disallow in-source builds, as CMake generated make files can collide with autotools ones +if (NOT MSVC AND "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") message(FATAL_ERROR " In-source builds are not permitted! Make a separate folder for" @@ -14,7 +14,7 @@ Before that, remove the files created by this failed run with" " rm -rf CMakeCache.txt CMakeFiles") endif () -## + ## HarfBuzz build configurations option(HB_HAVE_FREETYPE "Enable freetype interop helpers" OFF) @@ -53,8 +53,9 @@ endif () if (WIN32 AND NOT MINGW AND BUILD_SHARED_LIBS) add_definitions("-DHB_EXTERN=__declspec(dllexport) extern") endif () -## + +## Detect if cmake is in distribution or regular repository folder set(IN_HB_DIST FALSE) if (EXISTS "${PROJECT_SOURCE_DIR}/src/hb-version.h") # perhaps we are on dist directory @@ -62,6 +63,7 @@ if (EXISTS "${PROJECT_SOURCE_DIR}/src/hb-version.h") set(HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h") endif () + ## Extract variables from Makefile files # http://stackoverflow.com/a/27630120/1414809 function (prepend var prefix) @@ -108,7 +110,7 @@ set(HB_VERSION ${CMAKE_MATCH_1}) set(HB_VERSION_MAJOR ${CMAKE_MATCH_2}) set(HB_VERSION_MINOR ${CMAKE_MATCH_3}) set(HB_VERSION_MICRO ${CMAKE_MATCH_4}) -## + if (NOT IN_HB_DIST) ## Define ragel tasks @@ -131,7 +133,7 @@ if (NOT IN_HB_DIST) endforeach () mark_as_advanced(RAGEL) - ## + ## Generate hb-version.h set(HB_VERSION_H_IN "${PROJECT_SOURCE_DIR}/src/hb-version.h.in") @@ -142,7 +144,8 @@ if (NOT IN_HB_DIST) "${HB_VERSION_H}.tmp" "${HB_VERSION_H}") file(REMOVE "${HB_VERSION_H}.tmp") - ## + + endif () ## Define sources and headers of the project @@ -161,6 +164,8 @@ set(project_headers ${HB_OT_headers} ) + +## Find and include needed header folders and libraries if (HB_HAVE_FREETYPE) add_definitions(-DHAVE_FREETYPE=1 -DHAVE_FT_FACE_GETCHARVARIANTINDEX=1) @@ -285,7 +290,7 @@ if (WIN32 AND HB_HAVE_DIRECTWRITE) list(APPEND THIRD_PARTY_LIBS dwrite rpcrt4) endif () -## + ## Atomic ops availability detection file(WRITE "${PROJECT_BINARY_DIR}/try_compile_intel_atomic_primitives.c" @@ -317,11 +322,14 @@ try_compile(HB_HAVE_SOLARIS_ATOMIC_OPS if (HB_HAVE_SOLARIS_ATOMIC_OPS) add_definitions(-DHAVE_SOLARIS_ATOMIC_OPS) endif () -## + +## Define harfbuzz library add_library(harfbuzz ${project_sources} ${project_headers}) target_link_libraries(harfbuzz ${THIRD_PARTY_LIBS}) + +## Additional harfbuzz build artifacts if (HB_BUILD_UTILS) # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindCairo.cmake find_package(PkgConfig) @@ -343,9 +351,10 @@ if (HB_BUILD_UTILS) add_executable(hb-ot-shape-closure ${HB_OT_SHAPE_CLOSURE_sources}) target_link_libraries(hb-ot-shape-closure harfbuzz) - mark_as_advanced(CAIRO_LIBRARIESNAMES) + mark_as_advanced(CAIRO_INCLUDE_DIRS CAIRO_LIBRARIESNAMES) endif () + ## Install if (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) install(FILES ${project_headers} DESTINATION include/harfbuzz) @@ -358,4 +367,3 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) RUNTIME DESTINATION bin ) endif () -## _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz