protobuf: add examples when test feature enabled

Google Protocol Buffers includes some basic example applications to
show its functionality.  This fix installs these examples to the
target system when the "test" feature is enabled in the configuration.

Signed-off-by: Keith Holman <Keith.Holman@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
This commit is contained in:
Keith Holman 2014-08-20 16:46:10 -04:00 committed by Bruce Ashfield
parent 124d4185c4
commit 3cdfb6aac1
3 changed files with 128 additions and 4 deletions

View File

@ -0,0 +1,38 @@
From 46e331263eb92e47510e88478b255f226d30245c Mon Sep 17 00:00:00 2001
From: Keith Holman <Keith.Holman@windriver.com>
Date: Mon, 18 Aug 2014 15:19:35 -0400
Subject: [PATCH] protobuf: allow running python scripts from anywhere
The Makefile to generate the examples with Google Protocol Buffers
generates some scripts for python. However, these generated scripts
only work if they are ran in the same directory as the source files.
This fix generates scripts to execute from anywhere on the system.
Signed-off-by: Keith Holman <Keith.Holman@windriver.com>
---
examples/Makefile | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/examples/Makefile b/examples/Makefile
index 8dc9083..a993d63 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -48,11 +48,13 @@ list_people_java: javac_middleman
add_person_python: add_person.py protoc_middleman
@echo "Writing shortcut script add_person_python..."
@echo '#! /bin/sh' > add_person_python
- @echo './add_person.py "$$@"' >> add_person_python
+ @echo 'SCRIPT_DIR=$$(dirname $$0)' >> add_person_python
+ @echo '$$SCRIPT_DIR/add_person.py "$$@"' >> add_person_python
@chmod +x add_person_python
list_people_python: list_people.py protoc_middleman
@echo "Writing shortcut script list_people_python..."
@echo '#! /bin/sh' > list_people_python
- @echo './list_people.py "$$@"' >> list_people_python
+ @echo 'SCRIPT_DIR=$$(dirname $$0)' >> list_people_python
+ @echo '$$SCRIPT_DIR/list_people.py "$$@"' >> list_people_python
@chmod +x list_people_python
--
1.9.3

View File

@ -0,0 +1,32 @@
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TEST_FILE="/tmp/test.data"
RETVAL=0
# Test every writing test application
for write_exe_full_path in ${DIR}/add_person_*; do
if [ -x "${write_exe_full_path}" ]; then
write_exe=`basename ${write_exe_full_path}`
echo "Generating new test file using ${write_exe}..."
${write_exe_full_path} "${TEST_FILE}"
RETVAL=$?
# Test every reading test application
for read_exe_full_path in ${DIR}/list_people_*; do
read_exe=`basename ${read_exe_full_path}`
echo "Test: Write with ${write_exe}; Read with ${read_exe}..."
if [ -x "${read_exe_full_path}" ]; then
${read_exe_full_path} "${TEST_FILE}"
RETVAL=$?
fi
done
# Cleanup...
if [ -e "${TEST_FILE}" ]; then
rm "${TEST_FILE}"
fi
fi
done
exit $RETVAL

View File

@ -12,23 +12,77 @@ PR = "r0"
SRC_URI[md5sum] = "b751f772bdeb2812a2a8e7202bf1dae8"
SRC_URI[sha256sum] = "c55aa3dc538e6fd5eaf732f4eb6b98bdcb7cedb5b91d3b5bdcf29c98c293f58e"
SRC_URI = "http://protobuf.googlecode.com/files/protobuf-${PV}.tar.gz"
PYTHON_SRC_DIR="python"
SRC_URI = "http://protobuf.googlecode.com/files/protobuf-${PV}.tar.gz \
file://protobuf-allow-running-python-scripts-from-anywhere.patch \
file://run-ptest"
EXTRA_OECONF += " --with-protoc=echo"
inherit autotools setuptools
inherit autotools setuptools ptest
RDEPENDS_${PN}-ptest += "make"
PYTHON_SRC_DIR="python"
TEST_SRC_DIR="examples"
LANG_SUPPORT="cpp python"
do_compile() {
# Compile protoc compiler
base_do_compile
}
do_compile_ptest() {
# Modify makefile to use the cross-compiler
sed -e "s|c++|${CXX}|g" -i "${S}/${TEST_SRC_DIR}/Makefile"
# Add the location of the cross-compiled header and library files
# which haven't been installed yet.
cp "${S}/protobuf.pc" "${S}/${TEST_SRC_DIR}/protobuf.pc"
sed -e 's|Cflags:|Cflags: -I${S}/src|' -i "${S}/${TEST_SRC_DIR}/protobuf.pc"
sed -e 's|Libs:|Libs: -L${S}/src/.libs|' -i "${S}/${TEST_SRC_DIR}/protobuf.pc"
export PKG_CONFIG_PATH="${S}/${TEST_SRC_DIR}"
# Save the pkgcfg sysroot variable, and update it to nothing so
# that it doesn't append the sysroot to the beginning of paths.
# The header and library files aren't installed to the target
# system yet. So the absolute paths were specified above.
save_pkg_config_sysroot_dir=$PKG_CONFIG_SYSROOT_DIR
export PKG_CONFIG_SYSROOT_DIR=
# Compile the tests
for lang in ${LANG_SUPPORT}; do
oe_runmake -C "${S}/${TEST_SRC_DIR}" ${lang}
done
# Restore the pkgconfig sysroot variable
export PKG_CONFIG_SYSROOT_DIR=$save_pkg_config_sysroot_dir
}
do_install() {
local olddir=`pwd`
# Install protoc compiler
autotools_do_install
# Install header files
cd "${PYTHON_SRC_DIR}"
cd "${S}/${PYTHON_SRC_DIR}"
distutils_do_install
cd "$olddir"
}
do_install_ptest() {
local olddir=`pwd`
cd "${S}/${TEST_SRC_DIR}"
install -d "${D}/${PTEST_PATH}"
for i in add_person* list_people*; do
if [ -x "$i" ]; then
install "$i" "${D}/${PTEST_PATH}"
fi
done
cp "${S}/${TEST_SRC_DIR}/addressbook_pb2.py" "${D}/${PTEST_PATH}"
cd "$olddir"
}
BBCLASSEXTEND = "native nativesdk"