From 4c757d8f2c918b487aeb89a1db6b9277e7c87f66 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Mon, 21 Aug 2017 18:15:24 +0900 Subject: [PATCH 1/4] add architecture flag, allow for go pkgs to be installed from catkin --- cmake/rosgo-extras.cmake | 78 ++++++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 27 deletions(-) diff --git a/cmake/rosgo-extras.cmake b/cmake/rosgo-extras.cmake index 70dbe798..0c926474 100644 --- a/cmake/rosgo-extras.cmake +++ b/cmake/rosgo-extras.cmake @@ -35,6 +35,15 @@ function(_rosgo_make_gopath gopath_result) endfunction() +function(_rosgo_make_goarch goarch_result) + if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm") + set(${goarch_result} "arm" PARENT_SCOPE) + else() + set(${goarch_result} $ENV{GOARCH} PARENT_SCOPE) + endif() +endfunction() + + # Clear old symlinks and create new ones that point original sources. function(_rosgo_mirror_go_files package var) get_filename_component(orig_dir "${PROJECT_SOURCE_DIR}/src/${package}" ABSOLUTE) @@ -92,10 +101,11 @@ function(catkin_add_go_executable) set(exe "${CATKIN_DEVEL_PREFIX}/lib/${PROJECT_NAME}/${exe_name}") _rosgo_make_gopath(gopath) + _rosgo_make_goarch(goarch) add_custom_target( ${catkin_add_go_executable_TARGET} ALL - COMMAND env GOPATH=${gopath} go build -o ${exe} ${package} + COMMAND env GOPATH=${gopath} GOARCH=${goarch} go build -o ${exe} ${package} DEPENDS ${catkin_add_go_executable_DEPENDS} ${src_links}) endfunction() @@ -119,44 +129,58 @@ function(catkin_add_go_library) get_property(gopkg GLOBAL PROPERTY _ROSGO_PKG) _rosgo_make_gopath(gopath) + _rosgo_make_goarch(goarch) add_custom_target( ${catkin_add_go_library_TARGET} ALL - COMMAND env GOPATH=${gopath} go build -o ${gopkg}/${package}.a ${package} + COMMAND env GOPATH=${gopath} GOARCH=${goarch} go build -o ${gopkg}/${package}.a ${package} DEPENDS ${catkin_add_go_library_DEPENDS} ${src_links}) list(INSERT catkin_GO_LIBRARIES 0 ${catkin_add_go_library_TARGET}) endfunction() -# Add test target -function(catkin_add_go_test) - set(options) - set(one_value_args) - set(multi_value_args DEPENDS) - cmake_parse_arguments(catkin_add_go_test "${options}" "${one_value_args}" - "${multi_value_args}" "${ARGN}") - list(GET catkin_add_go_test_UNPARSED_ARGUMENTS 0 package) - string(REPLACE "/" "_" target "${package}") - - _rosgo_mirror_go_files(${package} src_links) - +# Add an external go package (e.g., github....) +function(catkin_add_go_pkg pkg_name pkg_go_source) _rosgo_make_gopath(gopath) + message("env GOPATH=${gopath} go get -v ${pkg_go_source}") + add_custom_target( + ${pkg_name} + COMMAND env GOPATH=${gopath} go get -v ${pkg_go_source} + ) +endfunction() - set(_depends "${catkin_add_go_test_DEPENDS};${src_links}") - add_custom_target( - run_tests_${PROJECT_NAME}_go_test_${target} - #COMMAND env GOPATH=${gopath} go test ${package} - COMMAND ${CATKIN_ENV} env GOPATH=${gopath} rosrun rosgo rosgo-test-wrapper.sh ${package} - DEPENDS ${_depends}) - - # Register this test to workspace-wide run_tests target - if(NOT TARGET run_tests_${PROJECT_NAME}_go_test) - add_custom_target(run_tests_${PROJECT_NAME}_go_test) - add_dependencies(run_tests run_tests_${PROJECT_NAME}_go_test) +# Add test target +function(catkin_add_go_test) + if(CATKIN_ENABLE_TESTING) + set(options) + set(one_value_args) + set(multi_value_args DEPENDS) + cmake_parse_arguments(catkin_add_go_test "${options}" "${one_value_args}" + "${multi_value_args}" "${ARGN}") + list(GET catkin_add_go_test_UNPARSED_ARGUMENTS 0 package) + string(REPLACE "/" "_" target "${package}") + + _rosgo_mirror_go_files(${package} src_links) + + _rosgo_make_gopath(gopath) + + set(_depends "${catkin_add_go_test_DEPENDS};${src_links}") + + add_custom_target( + run_tests_${PROJECT_NAME}_go_test_${target} + #COMMAND env GOPATH=${gopath} go test ${package} + COMMAND ${CATKIN_ENV} env GOPATH=${gopath} rosrun rosgo rosgo-test-wrapper.sh ${package} + DEPENDS ${_depends}) + + # Register this test to workspace-wide run_tests target + if(NOT TARGET run_tests_${PROJECT_NAME}_go_test) + add_custom_target(run_tests_${PROJECT_NAME}_go_test) + add_dependencies(run_tests run_tests_${PROJECT_NAME}_go_test) + endif() + add_dependencies(run_tests_${PROJECT_NAME}_go_test + run_tests_${PROJECT_NAME}_go_test_${target}) endif() - add_dependencies(run_tests_${PROJECT_NAME}_go_test - run_tests_${PROJECT_NAME}_go_test_${target}) endfunction() From 2ceec33b54a3e7606457cd277b990d4dc40c4112 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Tue, 22 Aug 2017 17:10:07 +0900 Subject: [PATCH 2/4] golang1.6 --- cmake/rosgo-extras.cmake | 18 ++++++++++-------- package.xml | 3 ++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/cmake/rosgo-extras.cmake b/cmake/rosgo-extras.cmake index 0c926474..e8e4eb1a 100644 --- a/cmake/rosgo-extras.cmake +++ b/cmake/rosgo-extras.cmake @@ -1,11 +1,14 @@ # vim: ft=cmake : + + function(_rosgo_setup_global_variable) + set(GO_BIN_PATH "/usr/lib/go-1.6/bin" PARENT_SCOPE) set(libdir "${CATKIN_DEVEL_PREFIX}/lib") set(root "${libdir}/go") file(MAKE_DIRECTORY ${root}) - execute_process(COMMAND go env GOARCH OUTPUT_VARIABLE goarch OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND go env GOOS OUTPUT_VARIABLE goos OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GO_BIN_PATH}/go env GOARCH OUTPUT_VARIABLE goarch OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GO_BIN_PATH}/go env GOOS OUTPUT_VARIABLE goos OUTPUT_STRIP_TRAILING_WHITESPACE) set_property(GLOBAL PROPERTY _ROSGO_ROOT "${root}") set_property(GLOBAL PROPERTY _ROSGO_BIN "${libdir}") set_property(GLOBAL PROPERTY _ROSGO_SRC "${root}/src") @@ -102,10 +105,9 @@ function(catkin_add_go_executable) _rosgo_make_gopath(gopath) _rosgo_make_goarch(goarch) - add_custom_target( ${catkin_add_go_executable_TARGET} ALL - COMMAND env GOPATH=${gopath} GOARCH=${goarch} go build -o ${exe} ${package} + COMMAND env GOPATH=${gopath} GOARCH=${goarch} ${GO_BIN_PATH}/go build -o ${exe} ${package} DEPENDS ${catkin_add_go_executable_DEPENDS} ${src_links}) endfunction() @@ -133,7 +135,7 @@ function(catkin_add_go_library) add_custom_target( ${catkin_add_go_library_TARGET} ALL - COMMAND env GOPATH=${gopath} GOARCH=${goarch} go build -o ${gopkg}/${package}.a ${package} + COMMAND env GOPATH=${gopath} GOARCH=${goarch} ${GO_BIN_PATH}/go build -o ${gopkg}/${package}.a ${package} DEPENDS ${catkin_add_go_library_DEPENDS} ${src_links}) list(INSERT catkin_GO_LIBRARIES 0 ${catkin_add_go_library_TARGET}) endfunction() @@ -142,10 +144,10 @@ endfunction() # Add an external go package (e.g., github....) function(catkin_add_go_pkg pkg_name pkg_go_source) _rosgo_make_gopath(gopath) - message("env GOPATH=${gopath} go get -v ${pkg_go_source}") + message("env GOPATH=${gopath} ${GO_BIN_PATH}/go get -v ${pkg_go_source}") add_custom_target( ${pkg_name} - COMMAND env GOPATH=${gopath} go get -v ${pkg_go_source} + COMMAND env GOPATH=${gopath} ${GO_BIN_PATH}/go get -v ${pkg_go_source} ) endfunction() @@ -169,7 +171,7 @@ function(catkin_add_go_test) add_custom_target( run_tests_${PROJECT_NAME}_go_test_${target} - #COMMAND env GOPATH=${gopath} go test ${package} + #COMMAND env GOPATH=${gopath} ${GO_BIN_PATH}/go test ${package} COMMAND ${CATKIN_ENV} env GOPATH=${gopath} rosrun rosgo rosgo-test-wrapper.sh ${package} DEPENDS ${_depends}) diff --git a/package.xml b/package.xml index 4e793d98..bafef81b 100644 --- a/package.xml +++ b/package.xml @@ -1,5 +1,5 @@ - + rosgo 0.0.0 ROS client library for Go programming language @@ -11,6 +11,7 @@ catkin rosgo_messages + golang-1.6 From 7d82f576698c079a8e9b42ed55341f590fe7ea05 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 13 Oct 2017 10:40:09 +0900 Subject: [PATCH 3/4] clean message, redirect stderr to stdout as catkin will note it as warning otherwise. --- cmake/rosgo-extras.cmake | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cmake/rosgo-extras.cmake b/cmake/rosgo-extras.cmake index e8e4eb1a..e5be0f2f 100644 --- a/cmake/rosgo-extras.cmake +++ b/cmake/rosgo-extras.cmake @@ -107,7 +107,7 @@ function(catkin_add_go_executable) _rosgo_make_goarch(goarch) add_custom_target( ${catkin_add_go_executable_TARGET} ALL - COMMAND env GOPATH=${gopath} GOARCH=${goarch} ${GO_BIN_PATH}/go build -o ${exe} ${package} + COMMAND env GOPATH=${gopath} GOARCH=${goarch} ${GO_BIN_PATH}/go build -o ${exe} ${package} 2>&1 DEPENDS ${catkin_add_go_executable_DEPENDS} ${src_links}) endfunction() @@ -135,7 +135,7 @@ function(catkin_add_go_library) add_custom_target( ${catkin_add_go_library_TARGET} ALL - COMMAND env GOPATH=${gopath} GOARCH=${goarch} ${GO_BIN_PATH}/go build -o ${gopkg}/${package}.a ${package} + COMMAND env GOPATH=${gopath} GOARCH=${goarch} ${GO_BIN_PATH}/go build -o ${gopkg}/${package}.a ${package} 2>&1 DEPENDS ${catkin_add_go_library_DEPENDS} ${src_links}) list(INSERT catkin_GO_LIBRARIES 0 ${catkin_add_go_library_TARGET}) endfunction() @@ -144,10 +144,9 @@ endfunction() # Add an external go package (e.g., github....) function(catkin_add_go_pkg pkg_name pkg_go_source) _rosgo_make_gopath(gopath) - message("env GOPATH=${gopath} ${GO_BIN_PATH}/go get -v ${pkg_go_source}") add_custom_target( ${pkg_name} - COMMAND env GOPATH=${gopath} ${GO_BIN_PATH}/go get -v ${pkg_go_source} + COMMAND env GOPATH=${gopath} ${GO_BIN_PATH}/go get -v ${pkg_go_source} 2>&1 ) endfunction() From 8fcc95f849094f4245a1b1b91ed47f61e094d662 Mon Sep 17 00:00:00 2001 From: Dhananjay Sathe Date: Thu, 1 Oct 2020 02:22:39 +0530 Subject: [PATCH 4/4] Add support for using a devel installed packages and messages that arent merge installed andhave different directory lookup structures for msg files --- gengo/context.go | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/gengo/context.go b/gengo/context.go index 19f04538..d61500ab 100644 --- a/gengo/context.go +++ b/gengo/context.go @@ -30,30 +30,35 @@ func findPackages(pkgType string, rosPkgPaths []string) (map[string]string, erro if err != nil { continue } + generateMsgs(p, pkgType, pkgs) for _, f := range files { if !f.IsDir() { continue } pkgPath := filepath.Join(p, f.Name()) - if isRosPackage(pkgPath) { - pkgName := filepath.Base(pkgPath) - msgPath := filepath.Join(pkgPath, pkgType) - msgPaths, err := filepath.Glob(msgPath + fmt.Sprintf("/*.%s", pkgType)) - if err != nil { - continue - } - for _, m := range msgPaths { - basename := filepath.Base(m) - rootname := basename[:len(basename)-len(pkgType)-1] - fullname := pkgName + "/" + rootname - pkgs[fullname] = m - } - } + generateMsgs(pkgPath, pkgType, pkgs) } } return pkgs, nil } +func generateMsgs(pkgPath, pkgType string, pkgs map[string]string) { + if isRosPackage(pkgPath) { + pkgName := filepath.Base(pkgPath) + msgPath := filepath.Join(pkgPath, pkgType) + msgPaths, err := filepath.Glob(msgPath + fmt.Sprintf("/*.%s", pkgType)) + if err != nil { + return + } + for _, m := range msgPaths { + basename := filepath.Base(m) + rootname := basename[:len(basename)-len(pkgType)-1] + fullname := pkgName + "/" + rootname + pkgs[fullname] = m + } + } +} + func findAllMessages(rosPkgPaths []string) (map[string]string, error) { return findPackages("msg", rosPkgPaths) }