aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2016-08-04 13:00:20 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2016-08-04 22:33:46 +0300
commite3663f8e727860a4e80b1873f6d3ef9c909f033a (patch)
treee64c8cc6a91a8d428c22053165b90d2e951035fc
parent184d6ed8ef42b4c9dd770d75c838842d9679858b (diff)
Update bpkg test to be able to specify C++ compiler
-rw-r--r--tests/pkg/1/build2.org/common/hello/libhello-1.0.0+1.tar.gzbin1489 -> 2145 bytes
-rw-r--r--tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/buildfile6
-rw-r--r--tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/export36
-rw-r--r--tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/hello4
-rwxr-xr-xtests/test.sh43
5 files changed, 71 insertions, 18 deletions
diff --git a/tests/pkg/1/build2.org/common/hello/libhello-1.0.0+1.tar.gz b/tests/pkg/1/build2.org/common/hello/libhello-1.0.0+1.tar.gz
index eeff2a0..3f1a59d 100644
--- a/tests/pkg/1/build2.org/common/hello/libhello-1.0.0+1.tar.gz
+++ b/tests/pkg/1/build2.org/common/hello/libhello-1.0.0+1.tar.gz
Binary files differ
diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/buildfile b/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/buildfile
index 4903a33..40b3222 100644
--- a/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/buildfile
+++ b/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/buildfile
@@ -3,6 +3,12 @@ lib{hello}: {hxx cxx}{hello}
cxx.poptions += -I$src_root
lib{hello}: cxx.export.poptions = -I$src_root
+liba{butl}: cxx.export.poptions += -DLIBHELLO_STATIC
+libs{butl}: cxx.export.poptions += -DLIBHELLO_SHARED
+
+obja{*}: cxx.poptions += -DLIBHELLO_STATIC_BUILD
+objs{*}: cxx.poptions += -DLIBHELLO_SHARED_BUILD
+
# Install into the hello/ subdirectory of, say, /usr/include/.
#
install.include = $install.include/hello
diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/export b/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/export
new file mode 100644
index 0000000..2da8177
--- /dev/null
+++ b/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/export
@@ -0,0 +1,36 @@
+// file: hello/export -*- C++ -*-
+
+#pragma once
+
+// Normally we don't export class templates (but do complete specializations),
+// inline functions, and classes with only inline member functions. Exporting
+// classes that inherit from non-exported/import bases (e.g., std::string)
+// will end up badly. The only known workarounds are to not inherit or to not
+// export. Also, MinGW GCC doesn't like seeing non-exported function being
+// used before their inline definition. The workaround is to reorder code. In
+// the end it's all trial and error.
+
+#if defined(LIBHELLO_STATIC) // Using static.
+# define LIBHELLO_EXPORT
+#elif defined(LIBHELLO_STATIC_BUILD) // Building static.
+# define LIBHELLO_EXPORT
+#elif defined(LIBHELLO_SHARED) // Using shared.
+# ifdef _WIN32
+# define LIBHELLO_EXPORT __declspec(dllimport)
+# else
+# define LIBHELLO_EXPORT
+# endif
+#elif defined(LIBHELLO_SHARED_BUILD) // Building shared.
+# ifdef _WIN32
+# define LIBHELLO_EXPORT __declspec(dllexport)
+# else
+# define LIBHELLO_EXPORT
+# endif
+#else
+// If none of the above macros are defined, then we assume we are being using
+// by some third-party build system that cannot/doesn't signal the library
+// type. Note that this fallback works for both static and shared but in case
+// of shared will be sub-optimal compared to having dllimport.
+//
+# define LIBHELLO_EXPORT // Using static or shared.
+#endif
diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/hello b/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/hello
index 4f85114..5fb7d9e 100644
--- a/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/hello
+++ b/tests/pkg/1/build2.org/common/libhello-1.0.0+1/hello/hello
@@ -4,8 +4,10 @@
#include <string>
+#include <hello/export>
+
namespace hello
{
- void
+ LIBHELLO_EXPORT void
say (const std::string& name);
}
diff --git a/tests/test.sh b/tests/test.sh
index 5f92c7c..e6d3033 100755
--- a/tests/test.sh
+++ b/tests/test.sh
@@ -15,6 +15,9 @@
# local test in order to create the repositories, then publish them (see
# pkg/publish.sh), and finally run the remote test.
#
+# -c <compiler>
+# Use the compiler specified to configure cxx module.
+#
# --valgrind
# Run under valgrind (takes forever).
#
@@ -54,6 +57,7 @@ fi
verbose=n
remote=n
options=
+cxx_options=
while [ $# -gt 0 ]; do
case $1 in
@@ -69,6 +73,11 @@ while [ $# -gt 0 ]; do
bpkg="valgrind -q $bpkg"
shift
;;
+ -c)
+ shift
+ cxx_options="config.cxx=$1"
+ shift
+ ;;
*)
# If this is the --verbose bpkg option, switch to the verbose
# mode as well.
@@ -297,6 +306,7 @@ sha256sum: d09700602ff78ae405b6d4850e34660e939d27676e015a23b549884497c8bb45
EOF
hello_fp=`rep_cert_fp pkg/1/build2.org/common/hello`
+
test rep-info -m -p --trust $hello_fp $rep/common/hello <<EOF
: 1
sha256sum: 8d324fa7911038778b215d28805c6546e737e0092f79f7bd167cf2e28f4ad96f
@@ -314,16 +324,16 @@ url: http://www.example.org/libhello
email: hello-users@example.org
requires: c++11
location: libhello-1.0.0+1.tar.gz
-sha256sum: ceff9f39dbff496ece817d6806ab3723b065dcdff1734683fe64a60c103f7f9b
+sha256sum: ff68e5269b5f594996a016ba2789f646cf5753e8baa0e9b4b77c4c4b81c41326
EOF
##
## cfg-create
##
-test cfg-create --wipe cxx config.install.root=/tmp/install
+test cfg-create --wipe cxx $cxx_options config.install.root=/tmp/install
stat libfoo unknown
-test cfg-create --wipe config.install.root=/tmp/install cxx
+test cfg-create --wipe config.install.root=/tmp/install cxx $cxx_options
stat libfoo unknown
@@ -585,7 +595,6 @@ rm $cfg/libfoo-1.0.0.tar.gz
test pkg-purge -f libfoo
stat libfoo unknown
-
##
## pkg-configure/pkg-disfigure
##
@@ -603,7 +612,7 @@ fail pkg-disfigure libhello1 # no such package
test pkg-fetch libhello/1.0.0+1
-fail pkg-configure libhello # wrong package state
+fail pkg-configure libhello $cxx_options # wrong package state
fail pkg-disfigure libhello # wrong package state
test pkg-purge libhello
@@ -612,7 +621,7 @@ test pkg-purge libhello
#
test pkg-fetch libhello/1.0.0+1
test pkg-unpack libhello
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
stat libhello "configured 1.0.0+1"
test pkg-disfigure libhello
stat libhello "unpacked 1.0.0+1"
@@ -623,7 +632,7 @@ stat libhello/1.0.0 "available 1.0.0+1"
#
test cfg-create --wipe
test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0+1
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
stat libhello "configured 1.0.0+1"
test pkg-disfigure libhello
stat libhello "unpacked 1.0.0+1"
@@ -634,7 +643,7 @@ gone $cfg/libhello-1.0.0+1
# out still exists after disfigure
#
test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0+1
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
touch $cfg/libhello-1.0.0+1/stray
fail pkg-disfigure libhello
stat libhello/1.0.0+1 broken
@@ -645,7 +654,7 @@ stat libhello unknown
# disfigure failed
#
test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0+1
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
chmod 555 $cfg/libhello-1.0.0+1
fail pkg-disfigure libhello
stat libhello/1.0.0+1 broken
@@ -665,7 +674,7 @@ if [ "$msys" != "y" ]; then
test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0+1
mkdir -p $cfg/libhello-1.0.0+1/build
chmod 555 $cfg/libhello-1.0.0+1/build
- fail pkg-configure libhello
+ fail pkg-configure libhello $cxx_options
stat libhello "unpacked 1.0.0+1"
test pkg-purge libhello
stat libhello unknown
@@ -677,7 +686,7 @@ if [ "$msys" != "y" ]; then
# Trip both con/dis.
#
chmod 555 $cfg/libhello-1.0.0+1 $cfg/libhello-1.0.0+1/build
- fail pkg-configure libhello
+ fail pkg-configure libhello $cxx_options
stat libhello/1.0.0+1 broken
chmod 755 $cfg/libhello-1.0.0+1 $cfg/libhello-1.0.0+1/build
rm -r $cfg/libhello-1.0.0+1
@@ -817,7 +826,7 @@ test pkg-purge libhello
#
test pkg-fetch libhello/1.0.0+1
test pkg-unpack libhello
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
test pkg-update libhello
test pkg-update libhello
test pkg-disfigure libhello
@@ -827,7 +836,7 @@ test pkg-purge libhello
#
test cfg-create --wipe
test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0+1
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
test pkg-update libhello
test pkg-update libhello
test pkg-disfigure libhello
@@ -851,7 +860,7 @@ test pkg-purge libhello
#
test pkg-fetch libhello/1.0.0+1
test pkg-unpack libhello
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
test pkg-update libhello
test pkg-clean libhello
test pkg-clean libhello
@@ -862,7 +871,7 @@ test pkg-purge libhello
#
test cfg-create --wipe
test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0+1
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
test pkg-update libhello
test pkg-clean libhello
test pkg-clean libhello
@@ -877,12 +886,12 @@ test pkg-purge libhello
# build and clean package
#
-test cfg-create --wipe cxx
+test cfg-create --wipe cxx $cxx_options
test rep-add $rep/common/hello
test rep-fetch --trust $hello_fp
test pkg-fetch libhello/1.0.0+1
test pkg-unpack libhello
-test pkg-configure libhello
+test pkg-configure libhello $cxx_options
test pkg-update libhello
test pkg-clean libhello
test pkg-disfigure libhello