Skip to content
This repository was archived by the owner on Jan 14, 2023. It is now read-only.

Commit ad3c3b2

Browse files
committed
command line message artifact generator.
1 parent 8f8754f commit ad3c3b2

File tree

6 files changed

+75
-11
lines changed

6 files changed

+75
-11
lines changed

scripts/genjava_gradle_project.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

33
"""
4-
ROS message source code generation for Java
4+
ROS message source code generation for Java, integration with ros' message_generation.
55
66
Converts ROS .msg files in a package into Java source code implementations.
77
"""

scripts/genjava_message_artifacts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
ROS message source code generation for Java, from the command line.
5+
6+
Converts ROS .msg files in a package into Java source code implementations.
7+
"""
8+
import os
9+
import sys
10+
11+
import genjava
12+
13+
if __name__ == "__main__":
14+
genjava.standalone_main(sys.argv)
15+

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
d = generate_distutils_setup(
77
packages=['genjava'],
88
package_dir={'': 'src'},
9-
requires=['genmsg']
9+
requires=['genmsg'],
10+
scripts=['scripts/genjava_message_artifacts'],
1011
)
1112

1213
setup(**d)

src/genjava/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@
3636
#__all__ = ['Time', 'Duration', 'TVal',
3737
# 'Message', 'SerializationError', 'DeserializationError', 'MessageException', 'struct_I']
3838

39-
from .genjava_main import main
39+
from .genjava_main import main, standalone_main

src/genjava/genjava_main.py

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@
3636

3737
from __future__ import print_function
3838
import argparse
39-
#import os
39+
import os
4040
#import sys
4141
#import traceback
4242
#import genmsg
4343
#import genmsg.command_line
4444

45-
#from genmsg import MsgGenerationException
46-
#from . generate_initpy import write_modules
45+
import rosjava_build_tools
46+
import catkin_pkg.packages
4747
from . import gradle_project
4848

4949
##############################################################################
@@ -52,16 +52,14 @@
5252

5353

5454
def parse_arguments(argv):
55-
'''
56-
The include path has a special format, e.g.
57-
-Ifoo_msgs:/mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg;-Istd_msgs:/opt/ros/hydro/share/std_msgs/cmake/../msg
58-
'''
5955
parser = argparse.ArgumentParser(description='Generate java code for a single ros message.')
6056
#parser.add_argument('-m', '--message', action='store', help='the message file')
6157
parser.add_argument('-p', '--package', action='store', help='package to find the message file')
6258
parser.add_argument('-o', '--output-dir', action='store', help='output directory for the java code (e.g. build/foo_msgs)')
6359
parser.add_argument('-c', '--compile', default=False, action='store_true', help='switch to compile mode (default is generating mode)')
6460
parser.add_argument('-v', '--verbosity', default=False, action='store_true', help='enable verbosity in debugging (false)')
61+
# The include path has a special format, e.g.
62+
# -Ifoo_msgs:/mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg;-Istd_msgs:/opt/ros/hydro/share/std_msgs/cmake/../msg
6563
#parser.add_argument('-I', '--include-path', action='append', help="include paths to the package and deps msg files")
6664
#myargs = rospy.myargv(argv=sys.argv)
6765
#return parser.parse_args(args=myargs[1:])
@@ -73,9 +71,41 @@ def parse_arguments(argv):
7371

7472

7573
def main(argv):
74+
'''
75+
Used as the builder for genjava on the fly as other message language interfaces
76+
are built. There is a bit of smarts inside this to work out when msgs have
77+
changed and so forth.
78+
'''
7679
args = parse_arguments(argv[1:])
7780
#print("genjava %s/%s" % (args.package, args.message))
7881
if not args.compile:
7982
gradle_project.create(args.package, args.output_dir)
8083
else:
8184
gradle_project.build(args.package, args.output_dir, args.verbosity)
85+
86+
87+
def standalone_parse_arguments(argv):
88+
parser = argparse.ArgumentParser(description='Generate artifacts for any/all discoverable message packages.')
89+
parser.add_argument('-p', '--package', action='store', default=None, help='package to generate (if not specified, all will be built)')
90+
parser.add_argument('-o', '--output-dir', action='store', default='build', help='output directory for the java code (e.g. build/foo_msgs)')
91+
parser.add_argument('-v', '--verbose', default=False, action='store_true', help='enable verbosity in debugging (false)')
92+
return parser.parse_args(argv)
93+
94+
95+
def standalone_main(argv):
96+
'''
97+
This guy is a brute force standalone message artifact generator. It parses
98+
the environment looking for the package (or just all) you wish to
99+
generate artifacts for.
100+
'''
101+
args = standalone_parse_arguments(argv[1:])
102+
#print("genjava %s/%s/%s" % (args.package, args.output_dir, args.verbose))
103+
104+
if args.package is not None:
105+
sorted_package_tuples = rosjava_build_tools.catkin.index_message_package_dependencies_from_local_environment(package_name=args.package)
106+
else:
107+
sorted_package_tuples = rosjava_build_tools.catkin.index_message_package_dependencies_from_local_environment()
108+
109+
print("Generating message artifacts for: \n%s" % [p.name for (unused_relative_path, p) in sorted_package_tuples])
110+
for unused_relative_path, p in sorted_package_tuples:
111+
gradle_project.standalone_create_and_build(p.name, args.output_dir, args.verbose)

src/genjava/gradle_project.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,11 @@ def create(msg_pkg_name, output_dir):
157157

158158

159159
def build(msg_pkg_name, output_dir, verbosity):
160+
# Are there droppings? If yes, then this genjava has marked this package as
161+
# needing a compile (it's new, or some msg file changed).
160162
droppings_file = os.path.join(output_dir, msg_pkg_name, 'droppings')
161163
if not os.path.isfile(droppings_file):
162-
#print("Someone already left droppings here! %s" % droppings_file)
164+
#print("Nobody left any droppings - nothing to do! %s" % droppings_file)
163165
return
164166
#print("Scooping the droppings! [%s]" % droppings_file)
165167
os.remove(droppings_file)
@@ -168,3 +170,19 @@ def build(msg_pkg_name, output_dir, verbosity):
168170
cmd.append('--quiet')
169171
#print("COMMAND........................%s" % cmd)
170172
subprocess.call(cmd, stderr=subprocess.STDOUT,)
173+
174+
175+
def standalone_create_and_build(msg_pkg_name, output_dir, verbosity):
176+
'''
177+
Brute force create and build the message artifact distregarding any smarts
178+
such as whether message files changed or not. For use with the standalone
179+
package builder.
180+
'''
181+
create(msg_pkg_name, output_dir)
182+
working_directory = os.path.join(os.path.abspath(output_dir), msg_pkg_name)
183+
gradle_wrapper = os.path.join(os.path.abspath(output_dir), msg_pkg_name, 'gradlew')
184+
cmd = [gradle_wrapper, '-p', working_directory]
185+
if not verbosity:
186+
cmd.append('--quiet')
187+
#print("COMMAND........................%s" % cmd)
188+
subprocess.call(cmd, stderr=subprocess.STDOUT,)

0 commit comments

Comments
 (0)