Skip to content

Commit

Permalink
THRIFT-5109 Misc Cmake build improvements
Browse files Browse the repository at this point in the history
Patch: Mario Emmenlauer

This closes apache#2094
  • Loading branch information
emmenlau authored and panivko committed May 29, 2020
1 parent 5bf5986 commit 58850cb
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 1 deletion.
8 changes: 8 additions & 0 deletions CMakeLists.txt
Expand Up @@ -113,6 +113,14 @@ if(BUILD_JAVA)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib/java)
endif()

if(BUILD_JAVASCRIPT)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib/js)
endif()

if(BUILD_NODEJS)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib/nodejs)
endif()

if(BUILD_PYTHON)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib/py)
if(BUILD_TESTING)
Expand Down
2 changes: 1 addition & 1 deletion build/cmake/DefineOptions.cmake
Expand Up @@ -108,7 +108,7 @@ endif()
# Javascript
option(WITH_JAVASCRIPT "Build Javascript Thrift library" ON)
CMAKE_DEPENDENT_OPTION(BUILD_JAVASCRIPT "Build Javascript library" ON
"BUILD_LIBRARIES;WITH_JAVASCRIPT" OFF)
"BUILD_LIBRARIES;WITH_JAVASCRIPT;NOT WIN32; NOT CYGWIN" OFF)

# NodeJS
option(WITH_NODEJS "Build NodeJS Thrift library" ON)
Expand Down
7 changes: 7 additions & 0 deletions compiler/cpp/CMakeLists.txt
Expand Up @@ -115,6 +115,13 @@ set_target_properties(thrift-compiler PROPERTIES OUTPUT_NAME thrift)

target_link_libraries(thrift-compiler parse)

add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/thrift${CMAKE_EXECUTABLE_SUFFIX}"
DEPENDS thrift-compiler
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:thrift-compiler>" "${CMAKE_CURRENT_SOURCE_DIR}/"
COMMENT "Copying the thrift compiler to the source tree for use by downstream targets")
add_custom_target(copy-thrift-compiler
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/thrift${CMAKE_EXECUTABLE_SUFFIX}")

install(TARGETS thrift-compiler DESTINATION bin)

if(BUILD_TESTING)
Expand Down
52 changes: 52 additions & 0 deletions lib/js/CMakeLists.txt
@@ -0,0 +1,52 @@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

if(NOT JAVASCRIPT_INSTALL_DIR)
if(IS_ABSOLUTE "${LIB_INSTALL_DIR}")
set(JAVASCRIPT_INSTALL_DIR "${LIB_INSTALL_DIR}/js")
else()
set(JAVASCRIPT_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/js")
endif()
endif()

if(IS_ABSOLUTE "${DOC_INSTALL_DIR}")
set(JAVASCRIPT_DOC_INSTALL_DIR "${DOC_INSTALL_DIR}/js")
else()
set(JAVASCRIPT_DOC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${DOC_INSTALL_DIR}/js")
endif()

add_custom_target(ThriftJavascriptPreDeps ALL
COMMENT "Installing Javascript dependencies using npm"
DEPENDS copy-thrift-compiler
COMMAND npm install
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)

add_custom_target(ThriftJavascript ALL
COMMENT "Building Javascript library using npx Grunt wrapper"
DEPENDS ThriftJavascriptPreDeps
COMMAND npx grunt
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)

install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/dist/"
DESTINATION "${JAVASCRIPT_INSTALL_DIR}"
FILES_MATCHING PATTERN "thrift*.js")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/doc/"
DESTINATION "${JAVASCRIPT_DOC_INSTALL_DIR}")
1 change: 1 addition & 0 deletions lib/js/Makefile.am
Expand Up @@ -57,6 +57,7 @@ EXTRA_DIST = \
Gruntfile.js \
package.json \
package-lock.json \
CMakeLists.txt \
README.md \
src \
test
44 changes: 44 additions & 0 deletions lib/nodejs/CMakeLists.txt
@@ -0,0 +1,44 @@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

if(NOT NODEJS_INSTALL_DIR)
if(IS_ABSOLUTE "${LIB_INSTALL_DIR}")
set(NODEJS_INSTALL_DIR "${LIB_INSTALL_DIR}/nodejs")
else()
set(NODEJS_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/nodejs")
endif()
endif()

# Currently no doc
#if(IS_ABSOLUTE "${DOC_INSTALL_DIR}")
# set(NODEJS_DOC_INSTALL_DIR "${DOC_INSTALL_DIR}/nodejs")
#else()
# set(NODEJS_DOC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${DOC_INSTALL_DIR}/nodejs")
#endif()

add_custom_target(ThriftNodeJS ALL
COMMENT "Installing NodeJS dependencies with npm"
COMMAND npm install
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../"
)

install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib/"
DESTINATION "${NODEJS_INSTALL_DIR}")
#install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/doc/"
# DESTINATION "${NODEJS_DOC_INSTALL_DIR}")
1 change: 1 addition & 0 deletions lib/nodejs/Makefile.am
Expand Up @@ -42,4 +42,5 @@ EXTRA_DIST = \
lib \
test \
coding_standards.md \
CMakeLists.txt \
README.md

0 comments on commit 58850cb

Please sign in to comment.