Skip to content

Commit

Permalink
Rewrite parsing. Make it a little simpler. Seems to work well.
Browse files Browse the repository at this point in the history
  • Loading branch information
Andersbakken committed Mar 28, 2013
1 parent 4634d7e commit 2d889ad
Show file tree
Hide file tree
Showing 11 changed files with 151 additions and 345 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ gr
/src/esprima/
/.gdb_brestore
/.gdb_brestore.txt
/src/include/rct/rct-config.h
60 changes: 48 additions & 12 deletions cmake/FindLibClang.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,61 @@ if(NOT DEFINED CLANG_ROOT)
set(CLANG_ROOT $ENV{CLANG_ROOT})
endif()

find_path(LibClang_INCLUDE_DIR clang-c/Index.h HINTS "${CLANG_ROOT}/include")
if (EXISTS ${LibClang_INCLUDE_DIR})
find_path(CLANG_INCLUDE clang-c/Index.h HINTS "${CLANG_ROOT}/include")
if (EXISTS ${CLANG_INCLUDE})
if ("${CLANG_ROOT}" STREQUAL "")
string(REGEX REPLACE "\\/include" "" CLANG_ROOT ${LibClang_INCLUDE_DIR})
string(REGEX REPLACE "\\/include" "" CLANG_ROOT ${CLANG_INCLUDE})
endif()
message("found include dir ${LibClang_INCLUDE_DIR}")
message("found include dir ${CLANG_INCLUDE}")
endif()
if (EXISTS "${CLANG_ROOT}/lib/libclang.so")
set(LibClang_LIBRARY "${CLANG_ROOT}/lib/libclang.so")
set(CLANG_LIBS "${CLANG_ROOT}/lib/libclang.so")
elseif (EXISTS "${CLANG_ROOT}/lib/libclang.dylib")
set(LibClang_LIBRARY "${CLANG_ROOT}/lib/libclang.dylib")
else()
find_library(LibClang_LIBRARY NAMES clang HINTS ${CLANG_ROOT}/lib/ ${CLANG_ROOT}/lib64/llvm/)
set(CLANG_LIBS "${CLANG_ROOT}/lib/libclang.dylib")
else ()
find_library(CLANG_LIBS NAMES clang HINTS ${CLANG_ROOT}/lib/ ${CLANG_ROOT}/lib64/llvm/)
endif()

set(LibClang_LIBRARIES ${LibClang_LIBRARY})
set(LibClang_INCLUDE_DIRS ${LibClang_INCLUDE_DIR})
if (EXISTS "${CLANG_INCLUDE}/clang/Basic/Version.inc")
file(READ "${CLANG_INCLUDE}/clang/Basic/Version.inc" CLANG_VERSION_DATA)
string(REGEX REPLACE ";" "\\\\;" CLANG_VERSION_DATA ${CLANG_VERSION_DATA})
string(REGEX REPLACE "\n" ";" CLANG_VERSION_DATA ${CLANG_VERSION_DATA})
foreach (line ${CLANG_VERSION_DATA})
string(REGEX REPLACE "^#define CLANG_VERSION ([0-9]+\\.[0-9]+)$" "\\1" CLANG_VERSION_STRING ${line})
if (DEFINED CLANG_VERSION_STRING)
string(REGEX REPLACE "^([0-9]+)\\.[0-9]+$" "\\1" CLANG_VERSION_MAJOR ${CLANG_VERSION_STRING})
string(REGEX REPLACE "^[0-9]+\\.([0-9]+)$" "\\1" CLANG_VERSION_MINOR ${CLANG_VERSION_STRING})
if (NOT ${CLANG_VERSION_MAJOR} STREQUAL "" AND NOT ${CLANG_VERSION_MINOR} STREQUAL "")
set(CLANG_VERSION "${CLANG_VERSION_MAJOR}.${CLANG_VERSION_MINOR}")
break()
endif ()
endif ()
endforeach ()
endif ()
if ("${CLANG_VERSION}" STREQUAL "")
message(FATAL_ERROR "Unable to parse ClangVersion from ${CLANG_INCLUDE}/clang/Basic/Version.inc")
endif ()

message("Using Clang version ${CLANG_VERSION} from ${CLANG_INCLUDE}/clang-c/")

if (EXISTS "${CLANG_INCLUDE}/clang/${CLANG_VERSION}/include/limits.h")
set(CLANG_SYSTEM_INCLUDE "${CLANG_INCLUDE}/clang/${CLANG_VERSION}/include/")
else ()
set(CLANG_SYSTEM_INCLUDE ${CLANG_LIBS})
string(REGEX REPLACE "\\/libclang\\.[dylibso]+$" "" CLANG_SYSTEM_INCLUDE ${CLANG_SYSTEM_INCLUDE})
if (EXISTS "${CLANG_SYSTEM_INCLUDE}/clang/${CLANG_VERSION}/include/limits.h")
set(CLANG_SYSTEM_INCLUDE "${CLANG_SYSTEM_INCLUDE}/clang/${CLANG_VERSION}/include/")
else ()
set(CLANG_SYSTEM_INCLUDE "")
if (EXISTS "${CLANG_ROOT}/lib/clang/${CLANG_VERSION}/include/limits.h")
set(CLANG_SYSTEM_INCLUDE "${CLANG_ROOT}/lib/clang/${CLANG_VERSION}/include/")
else ()
message(FATAL_ERROR "Couldn't find limits.h in either ${CLANG_INCLUDE}/clang/${CLANG_VERSION}/include/ or ${CLANG_SYSTEM_INCLUDE}/clang/${CLANG_VERSION}/include/")
endif ()
endif ()
endif ()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibClang DEFAULT_MSG LibClang_LIBRARY LibClang_INCLUDE_DIR)
find_package_handle_standard_args(CLANG DEFAULT_MSG CLANG_LIBS CLANG_INCLUDE)

mark_as_advanced(LibClang_INCLUDE_DIR LibClang_LIBRARY)
mark_as_advanced(CLANG_INCLUDE CLANG_LIBS)
30 changes: 12 additions & 18 deletions cmake/FindV8.cmake
Original file line number Diff line number Diff line change
@@ -1,29 +1,26 @@
# - Find V8
# Find the native V8 headers and libraries.
#
# V8_INCLUDE_DIR - where to find V8.h, etc.
# V8_LIBRARIES - List of libraries when using V8.
# V8_FOUND - True if V8 found.
# V8_INCLUDE - Where to find v8.h
# V8_LIBS - List of libraries when using V8.
# V8_FOUND - True if V8 found.

get_filename_component(module_file_path ${CMAKE_CURRENT_LIST_FILE} PATH )
get_filename_component(module_file_path ${CMAKE_CURRENT_LIST_FILE} PATH)

# Look for the header file.
find_path(V8_INCLUDE_DIR NAMES v8.h PATHS /usr/include $ENV{V8_ROOT}/include DOC "Path in which the file v8.h is located." )
mark_as_advanced(V8_INCLUDE_DIR)
find_path(V8_INCLUDE NAMES v8.h PATHS /usr/include $ENV{V8_ROOT}/include DOC "Path in which the file v8.h is located." )
mark_as_advanced(V8_INCLUDE)

# Look for the library.
# Does this work on UNIX systems? (LINUX)
find_library(V8_LIBRARY NAMES v8 PATHS /usr/lib $ENV{V8_ROOT}/lib DOC "Path to v8 library." )
mark_as_advanced(V8_LIBRARY)
find_library(V8_LIBS NAMES v8 PATHS /usr/lib $ENV{V8_ROOT}/lib DOC "Path to v8 library." )
mark_as_advanced(V8_LIBS)

# Copy the results to the output variables.
if (V8_INCLUDE_DIR AND V8_LIBRARY)
if (V8_INCLUDE AND V8_LIBS)
set(V8_FOUND 1)
set(V8_LIBRARIES ${V8_LIBRARY})
set(V8_INCLUDE_DIR ${V8_INCLUDE_DIR})
include(CheckCXXSourceCompiles)
set(CMAKE_REQUIRED_LIBRARIES ${V8_LIBRARIES} pthread)
set(CMAKE_REQUIRED_INCLUDES ${V8_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARY ${V8_LIBS} pthread)
set(CMAKE_REQUIRED_INCLUDES ${V8_INCLUDE})

check_cxx_source_compiles("
#include <v8.h>
Expand All @@ -37,14 +34,11 @@ if (V8_INCLUDE_DIR AND V8_LIBRARY)
V8_DISPOSE_REQUIRES_ARG)
else ()
set(V8_FOUND 0)
set(V8_LIBRARIES)
set(V8_INCLUDE_DIR)
endif ()

# Report the results.
if (NOT V8_FOUND)
set(V8_DIR_MESSAGE
"V8 was not found. Make sure V8_LIBRARY and V8_INCLUDE_DIR are set.")
set(V8_DIR_MESSAGE "V8 was not found. Make sure V8_LIBS and V8_INCLUDE are set.")
if (V8_FIND_REQUIRED)
message(FATAL_ERROR "${V8_DIR_MESSAGE}")
elseif (NOT V8_FIND_QUIETLY)
Expand Down
95 changes: 41 additions & 54 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,7 @@ if (NOT CMAKE_BUILD_TYPE)
endif ()

find_package(LibClang REQUIRED)
include_directories(${LibClang_INCLUDE_DIRS})
set(clang_LIBS ${LibClang_LIBRARIES})

include(${CMAKE_CURRENT_LIST_DIR}/ClangVersion.cmake)
clangversion(${LibClang_INCLUDE_DIRS} CLANG_VERSION_MAJOR CLANG_VERSION_MINOR)
set(CLANG_VERSION "${CLANG_VERSION_MAJOR}.${CLANG_VERSION_MINOR}")
message("Using Clang version ${CLANG_VERSION} from ${LibClang_INCLUDE_DIRS}/clang-c/")
include_directories(${CLANG_INCLUDE})

find_package(V8 REQUIRED)

Expand All @@ -28,12 +22,12 @@ add_definitions("-DESPRIMA_JS=\"${PROJECT_SOURCE_DIR}/src/esprima/esprima.js\"")
add_definitions(-DOS_${CMAKE_SYSTEM_NAME})

if (CMAKE_SYSTEM_NAME MATCHES "Linux")
set(system_LIBS pthread rt crypto)
set(SYSTEM_LIBS pthread rt crypto)
elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
add_definitions(-D__LONG_LONG_SUPPORTED)
set(system_LIBS pthread crypto)
set(SYSTEM_LIBS pthread crypto)
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(system_LIBS crypto)
set(SYSTEM_LIBS crypto)
find_program(SW_VER sw_vers)
execute_process(COMMAND "${SW_VER}" -productVersion OUTPUT_VARIABLE osver)
string(REPLACE "\n" "" osver "${osver}")
Expand All @@ -50,7 +44,7 @@ endif ()

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)

set(rtags_shared_SOURCES
set(RTAGS_SHARED_SOURCES
Client.cpp
CompileMessage.cpp
CompletionMessage.cpp
Expand All @@ -60,10 +54,7 @@ set(rtags_shared_SOURCES
RClient.cpp
RTags.cpp)

# message(${RCT_SOURCES})
# message(${rtags_shared_SOURCES})

set(rdm_SOURCES
set(RDM_SOURCES
CompileJob.cpp
CompletionJob.cpp
CompilerManager.cpp
Expand All @@ -90,51 +81,47 @@ set(rdm_SOURCES
ValidateDBJob.cpp
)

set(gr_SOURCES GRParser.cpp GRTags.cpp Location.cpp RTags.cpp)
set(GR_SOURCES GRParser.cpp GRTags.cpp Location.cpp RTags.cpp)

include_directories(${CMAKE_CURRENT_LIST_DIR} ${CORESERVICES_INCLUDE} ${COREFOUNDATION_INCLUDE})

add_executable(clangtest clangtest.c)
target_link_libraries(clangtest ${clang_LIBS} ${CORESERVICES_LIBRARY} ${COREFOUNDATION_LIBRARY} ${system_LIBS})
target_link_libraries(clangtest ${CLANG_LIBS} ${CORESERVICES_LIBRARY} ${COREFOUNDATION_LIBRARY} ${SYSTEM_LIBS})

add_executable(rc rc.cpp ${rtags_shared_SOURCES} ${RCT_SOURCES})
target_link_libraries(rc ${rct_LIBS} ${system_LIBS})
add_executable(rc rc.cpp ${RTAGS_SHARED_SOURCES} ${RCT_SOURCES})
target_link_libraries(rc ${SYSTEM_LIBS})

add_executable(rdm rdm.cpp ${rtags_shared_SOURCES} ${RCT_SOURCES} ${rdm_SOURCES})
include_directories(${V8_INCLUDE_DIR})
add_executable(rdm rdm.cpp ${RTAGS_SHARED_SOURCES} ${RCT_SOURCES} ${RDM_SOURCES})
include_directories(${V8_INCLUDE})
if (V8_DISPOSE_REQUIRES_ARG)
add_definitions(-DV8_DISPOSE_REQUIRES_ARG)
endif ()
target_link_libraries(rdm ${rct_LIBS} ${clang_LIBS} ${CORESERVICES_LIBRARY} ${COREFOUNDATION_LIBRARY} ${rct_LIBS} ${system_LIBS} ${V8_LIBRARIES})

message("Need to fix grtags, requires leveldb")
if (GRTAGS_ENABLED MATCHES "1")
include_directories(${PROJECT_SOURCE_DIR}/3rdparty/leveldb)
add_executable(gr ${gr_SOURCES})
include_directories(
${CORESERVICES_INCLUDE}
${COREFOUNDATION_INCLUDE}
${PROJECT_SOURCE_DIR}/3rdparty/leveldb/include)
target_link_libraries(gr
${clang_LIBS}
${system_LIBS}
${CORESERVICES_LIBRARY}
${COREFOUNDATION_LIBRARY}
${rct_LIBS}
${system_LIBS}
${PROJECT_SOURCE_DIR}/3rdparty/leveldb/libleveldb.a)
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/rct/CMakeLists.txt)
add_dependencies(gr rct)
endif ()
endif ()

if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_custom_command(TARGET rdm POST_BUILD
COMMAND ${CMAKE_CURRENT_LIST_DIR}/fix-dylib.sh ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/bin/rdm)
add_custom_command(TARGET rc POST_BUILD
COMMAND ${CMAKE_CURRENT_LIST_DIR}/fix-dylib.sh ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/bin/rc)
if (GRTAGS_ENABLED MATCHES 1)
add_custom_command(TARGET gr POST_BUILD
COMMAND ${CMAKE_CURRENT_LIST_DIR}/fix-dylib.sh ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/bin/gr)
endif ()
endif ()
target_link_libraries(rdm ${rct_LIBS} ${CLANG_LIBS} ${CORESERVICES_LIBRARY} ${COREFOUNDATION_LIBRARY} ${rct_LIBS} ${SYSTEM_LIBS} ${V8_LIBS})

message("Need to fix grtags, requires leveldb")
if (GRTAGS_ENABLED MATCHES "1")
include_directories(${PROJECT_SOURCE_DIR}/3rdparty/leveldb)
add_executable(gr ${GR_SOURCES} ${RCT_SOURCES})
include_directories(
${CORESERVICES_INCLUDE}
${COREFOUNDATION_INCLUDE}
${PROJECT_SOURCE_DIR}/3rdparty/leveldb/include)
target_link_libraries(gr
${CLANG_LIBS}
${SYSTEM_LIBS}
${CORESERVICES_LIBRARY}
${COREFOUNDATION_LIBRARY}
${SYSTEM_LIBS}
${PROJECT_SOURCE_DIR}/3rdparty/leveldb/libleveldb.a)
endif ()

if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_custom_command(TARGET rdm POST_BUILD
COMMAND ${CMAKE_CURRENT_LIST_DIR}/fix-dylib.sh ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/bin/rdm)
add_custom_command(TARGET rc POST_BUILD
COMMAND ${CMAKE_CURRENT_LIST_DIR}/fix-dylib.sh ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/bin/rc)
if (GRTAGS_ENABLED MATCHES 1)
add_custom_command(TARGET gr POST_BUILD
COMMAND ${CMAKE_CURRENT_LIST_DIR}/fix-dylib.sh ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/bin/gr)
endif ()
endif ()
1 change: 0 additions & 1 deletion src/CursorInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
const char *jsKindNames[] = {
"JSInvalid",
"JSVariable",
"JSWeakVariable",
"JSFunction",
"JSReference"
};
Expand Down
3 changes: 1 addition & 2 deletions src/CursorInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@ class CursorInfo
enum JSCursorKind {
JSInvalid = 10000,
JSVariable,
JSWeakVariable,
JSFunction,
JSReference
};

CursorInfo()
: symbolLength(0), kind(CXCursor_FirstInvalid), type(CXType_Invalid), enumValue(0), start(-1), end(-1)
{}
Expand Down
Loading

0 comments on commit 2d889ad

Please sign in to comment.