From b52fff1f9df6a42005f4c236e176024b1e487784 Mon Sep 17 00:00:00 2001 From: Akos Kiss Date: Thu, 16 Aug 2018 00:55:38 +0200 Subject: [PATCH] Distinguish between public and private headers in jerry-core (#2472) The patch also ensures that all components access only the public headers of other components (except for unit tests, which are allowed to use private headers, too). JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu --- CMakeLists.txt | 10 +++++----- jerry-core/CMakeLists.txt | 14 +++++++++----- jerry-ext/CMakeLists.txt | 2 ++ jerry-port/default/CMakeLists.txt | 4 ++-- tests/unit-core/CMakeLists.txt | 2 +- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f155c1fe6..6255daad6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -246,16 +246,16 @@ endif() # Jerry's core add_subdirectory(jerry-core) -# Jerry's default port implementation -if(JERRY_PORT_DEFAULT) - add_subdirectory(jerry-port/default) -endif() - # Jerry's extension tools if(JERRY_EXT) add_subdirectory(jerry-ext) endif() +# Jerry's default port implementation +if(JERRY_PORT_DEFAULT) + add_subdirectory(jerry-port/default) +endif() + # Jerry command line tool if(JERRY_CMDLINE OR JERRY_CMDLINE_TEST OR JERRY_CMDLINE_SNAPSHOT) add_subdirectory(jerry-main) diff --git a/jerry-core/CMakeLists.txt b/jerry-core/CMakeLists.txt index 77224b92d..70423afcd 100644 --- a/jerry-core/CMakeLists.txt +++ b/jerry-core/CMakeLists.txt @@ -96,7 +96,8 @@ message(STATUS "FEATURE_VM_EXEC_STOP " ${FEATURE_VM_EXEC_STOP}) message(STATUS "MEM_HEAP_SIZE_KB " ${MEM_HEAP_SIZE_KB}) # Include directories -set(INCLUDE_CORE +set(INCLUDE_CORE_PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") +set(INCLUDE_CORE_PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/api" "${CMAKE_CURRENT_SOURCE_DIR}/debugger" @@ -104,7 +105,6 @@ set(INCLUDE_CORE "${CMAKE_CURRENT_SOURCE_DIR}/ecma/builtin-objects" "${CMAKE_CURRENT_SOURCE_DIR}/ecma/builtin-objects/typedarray" "${CMAKE_CURRENT_SOURCE_DIR}/ecma/operations" - "${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_SOURCE_DIR}/jcontext" "${CMAKE_CURRENT_SOURCE_DIR}/jmem" "${CMAKE_CURRENT_SOURCE_DIR}/jrt" @@ -113,6 +113,9 @@ set(INCLUDE_CORE "${CMAKE_CURRENT_SOURCE_DIR}/parser/regexp" "${CMAKE_CURRENT_SOURCE_DIR}/vm") +set(INCLUDE_CORE_PUBLIC ${INCLUDE_CORE_PUBLIC} PARENT_SCOPE) # for jerry-port +set(INCLUDE_CORE_PRIVATE ${INCLUDE_CORE_PRIVATE} PARENT_SCOPE) # for tests/unit-core + # Sources # Jerry core file(GLOB SOURCE_CORE_API api/*.c) @@ -270,7 +273,7 @@ endif() # Valgrind if(FEATURE_VALGRIND) set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_VALGRIND) - set(INCLUDE_CORE ${INCLUDE_CORE} ${INCLUDE_THIRD_PARTY_VALGRIND}) + set(INCLUDE_CORE_PRIVATE ${INCLUDE_CORE_PRIVATE} ${INCLUDE_THIRD_PARTY_VALGRIND}) endif() # Enable VM execution stopping @@ -285,7 +288,8 @@ set(DEFINES_JERRY ${DEFINES_JERRY} CONFIG_MEM_HEAP_AREA_SIZE=${MEM_HEAP_AREA_SIZ add_library(${JERRY_CORE_NAME} ${SOURCE_CORE_FILES}) target_compile_definitions(${JERRY_CORE_NAME} PUBLIC ${DEFINES_JERRY}) -target_include_directories(${JERRY_CORE_NAME} PUBLIC ${INCLUDE_CORE}) +target_include_directories(${JERRY_CORE_NAME} PUBLIC ${INCLUDE_CORE_PUBLIC}) +target_include_directories(${JERRY_CORE_NAME} PRIVATE ${INCLUDE_CORE_PRIVATE}) if(JERRY_LIBM) target_link_libraries(${JERRY_CORE_NAME} jerry-libm) @@ -301,4 +305,4 @@ foreach(EXT_LIB ${EXTERNAL_LINK_LIBS}) endforeach() install(TARGETS ${JERRY_CORE_NAME} DESTINATION lib) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include) +install(DIRECTORY ${INCLUDE_CORE_PUBLIC}/ DESTINATION include) diff --git a/jerry-ext/CMakeLists.txt b/jerry-ext/CMakeLists.txt index 8e7b0a081..94e5cbb76 100644 --- a/jerry-ext/CMakeLists.txt +++ b/jerry-ext/CMakeLists.txt @@ -20,6 +20,8 @@ project (${JERRY_EXT_NAME} C) set(INCLUDE_EXT_PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") set(INCLUDE_EXT_PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/common") +set(INCLUDE_EXT_PUBLIC ${INCLUDE_EXT_PUBLIC} PARENT_SCOPE) # for jerry-port + if(FEATURE_INIT_FINI) set(DEFINES_EXT ${DEFINES_EXT} ENABLE_INIT_FINI) endif() diff --git a/jerry-port/default/CMakeLists.txt b/jerry-port/default/CMakeLists.txt index 270d5d824..e388dc993 100644 --- a/jerry-port/default/CMakeLists.txt +++ b/jerry-port/default/CMakeLists.txt @@ -42,8 +42,8 @@ endif() foreach(JERRY_PORT_LIBRARY_NAME ${JERRY_PORT_DEFAULT_NAME} ${JERRY_PORT_DEFAULT_NAME}-minimal) add_library(${JERRY_PORT_LIBRARY_NAME} ${SOURCE_PORT_DEFAULT}) target_include_directories(${JERRY_PORT_LIBRARY_NAME} PUBLIC ${INCLUDE_PORT_DEFAULT}) - target_include_directories(${JERRY_PORT_LIBRARY_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/jerry-core/include) - target_include_directories(${JERRY_PORT_LIBRARY_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/jerry-ext/include) + target_include_directories(${JERRY_PORT_LIBRARY_NAME} PRIVATE ${INCLUDE_CORE_PUBLIC}) + target_include_directories(${JERRY_PORT_LIBRARY_NAME} PRIVATE ${INCLUDE_EXT_PUBLIC}) target_compile_definitions(${JERRY_PORT_LIBRARY_NAME} PRIVATE ${DEFINES_PORT_DEFAULT}) target_link_libraries(${JERRY_PORT_LIBRARY_NAME} jerry-core) # FIXME: remove this dependency as soon as possible endforeach() diff --git a/tests/unit-core/CMakeLists.txt b/tests/unit-core/CMakeLists.txt index 6723f0353..63ddc4601 100644 --- a/tests/unit-core/CMakeLists.txt +++ b/tests/unit-core/CMakeLists.txt @@ -34,9 +34,9 @@ foreach(SOURCE_UNIT_TEST_MAIN ${SOURCE_UNIT_TEST_MAIN_MODULES}) set(TARGET_NAME unit-${TARGET_NAME}) add_executable(${TARGET_NAME} ${SOURCE_UNIT_TEST_MAIN}) + target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_CORE_PRIVATE}) set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_COMMON}") set_property(TARGET ${TARGET_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests") - target_link_libraries(${TARGET_NAME} jerry-core jerry-port-default-minimal) add_dependencies(unittests-core ${TARGET_NAME})