From 0f6b759e11451b9cdae4b5f64fdcc82989161482 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 20 Jul 2017 08:55:33 +0200 Subject: Add modularized version --- libmhello/.gitignore | 19 +++++++++++++++++++ libmhello/INSTALL | 1 + libmhello/build/.gitignore | 1 + libmhello/build/bootstrap.build | 7 +++++++ libmhello/build/export.build | 6 ++++++ libmhello/build/root.build | 10 ++++++++++ libmhello/buildfile | 9 +++++++++ libmhello/libmhello/buildfile | 15 +++++++++++++++ libmhello/libmhello/hello.cxx | 20 ++++++++++++++++++++ libmhello/libmhello/hello.mxx | 11 +++++++++++ libmhello/manifest | 21 +++++++++++++++++++++ libmhello/tests/.gitignore | 1 + libmhello/tests/build/.gitignore | 1 + libmhello/tests/build/bootstrap.build | 5 +++++ libmhello/tests/build/root.build | 13 +++++++++++++ libmhello/tests/buildfile | 1 + libmhello/tests/test/buildfile | 5 +++++ libmhello/tests/test/driver.cxx | 12 ++++++++++++ libmhello/tests/test/test.out | 1 + 19 files changed, 159 insertions(+) create mode 100644 libmhello/.gitignore create mode 100644 libmhello/INSTALL create mode 100644 libmhello/build/.gitignore create mode 100644 libmhello/build/bootstrap.build create mode 100644 libmhello/build/export.build create mode 100644 libmhello/build/root.build create mode 100644 libmhello/buildfile create mode 100644 libmhello/libmhello/buildfile create mode 100644 libmhello/libmhello/hello.cxx create mode 100644 libmhello/libmhello/hello.mxx create mode 100644 libmhello/manifest create mode 100644 libmhello/tests/.gitignore create mode 100644 libmhello/tests/build/.gitignore create mode 100644 libmhello/tests/build/bootstrap.build create mode 100644 libmhello/tests/build/root.build create mode 100644 libmhello/tests/buildfile create mode 100644 libmhello/tests/test/buildfile create mode 100644 libmhello/tests/test/driver.cxx create mode 100644 libmhello/tests/test/test.out diff --git a/libmhello/.gitignore b/libmhello/.gitignore new file mode 100644 index 0000000..1173da4 --- /dev/null +++ b/libmhello/.gitignore @@ -0,0 +1,19 @@ +# Compiler/linker output. +# +*.d +*.ii +*.o +*.obj +*.nms +*.pcm +*.ifc +*.so +*.dll +*.a +*.lib +*.exp +*.exe +*.exe.dlls/ +*.exe.manifest + +version diff --git a/libmhello/INSTALL b/libmhello/INSTALL new file mode 100644 index 0000000..485b10f --- /dev/null +++ b/libmhello/INSTALL @@ -0,0 +1 @@ +Just use build2, bro. diff --git a/libmhello/build/.gitignore b/libmhello/build/.gitignore new file mode 100644 index 0000000..225c27f --- /dev/null +++ b/libmhello/build/.gitignore @@ -0,0 +1 @@ +config.build diff --git a/libmhello/build/bootstrap.build b/libmhello/build/bootstrap.build new file mode 100644 index 0000000..efd74f9 --- /dev/null +++ b/libmhello/build/bootstrap.build @@ -0,0 +1,7 @@ +project = libmhello + +using version +using config +using dist +using test +using install diff --git a/libmhello/build/export.build b/libmhello/build/export.build new file mode 100644 index 0000000..8d39dbb --- /dev/null +++ b/libmhello/build/export.build @@ -0,0 +1,6 @@ +$out_root/: +{ + include libmhello/ +} + +export $out_root/libmhello/lib{mhello} diff --git a/libmhello/build/root.build b/libmhello/build/root.build new file mode 100644 index 0000000..0f4a099 --- /dev/null +++ b/libmhello/build/root.build @@ -0,0 +1,10 @@ +cxx.std = experimental + +cxx.features.symexport = true + +using cxx + +assert $cxx.features.modules 'c++ compiler does not support modules' + +mxx{*}: extension = mxx +cxx{*}: extension = cxx diff --git a/libmhello/buildfile b/libmhello/buildfile new file mode 100644 index 0000000..2b699a3 --- /dev/null +++ b/libmhello/buildfile @@ -0,0 +1,9 @@ +./: libmhello/ tests/ doc{INSTALL version} file{manifest} + +doc{version}: file{manifest} # Generated by the version module. +doc{version}: dist = true + +# Don't install tests or the INSTALL file. +# +dir{tests/}: install = false +doc{INSTALL}@./: install = false diff --git a/libmhello/libmhello/buildfile b/libmhello/libmhello/buildfile new file mode 100644 index 0000000..799e848 --- /dev/null +++ b/libmhello/libmhello/buildfile @@ -0,0 +1,15 @@ +import libs = libstd-modules%liba{std-modules} + +lib{mhello}: {mxx cxx}{hello} $libs + +# For pre-releases use the complete version to make sure they cannot be used +# in place of another pre-release or the final version. +# +if $version.pre_release + lib{mhello}: bin.lib.version = @"-$version.project_id" +else + lib{mhello}: bin.lib.version = @"-$version.major.$version.minor" + +# Install into the libmhello/ subdirectory of, say, /usr/include/. +# +install.include = $install.include/$project/ diff --git a/libmhello/libmhello/hello.cxx b/libmhello/libmhello/hello.cxx new file mode 100644 index 0000000..ff01860 --- /dev/null +++ b/libmhello/libmhello/hello.cxx @@ -0,0 +1,20 @@ +// file: libmhello/hello.cxx -*- C++ -*- + +module hello; + +#ifdef __clang__ +import std.core; +#endif + +import std.io; + +using namespace std; + +namespace hello +{ + void + say (const string& n) + { + cout << "Hello, " << n << '!' << endl; + } +} diff --git a/libmhello/libmhello/hello.mxx b/libmhello/libmhello/hello.mxx new file mode 100644 index 0000000..56993b3 --- /dev/null +++ b/libmhello/libmhello/hello.mxx @@ -0,0 +1,11 @@ +// file: libmhello/hello.mxx -*- C++ -*- + +export module hello; + +import std.core; + +export namespace hello +{ + __symexport void + say (const std::string& name); +} diff --git a/libmhello/manifest b/libmhello/manifest new file mode 100644 index 0000000..ca78c31 --- /dev/null +++ b/libmhello/manifest @@ -0,0 +1,21 @@ +: 1 +name: libmhello +version: 1.0.0 +summary: The modularized "Hello World" example library +license: MIT +tags: c++, hello, world, example, modules +description: \ +A simple library that implements the "Hello World" example in C++ with +modules. Its primary goal is to show a canonical build2/bpkg project/package. +\ +url: http://www.example.org/libmhello +email: hello-users@example.org +build-email: builds@build2.org +build-exclude: *-msvc_15u0* ; Broken C++ modules support +build-include: *-msvc_15* +build-include: *-clang_5.0* +build-exclude: * ; Requires C++ modules support +requires: c++20 +depends: * build2 >= 0.6.0- +depends: * bpkg >= 0.6.0- +depends: libstd-modules diff --git a/libmhello/tests/.gitignore b/libmhello/tests/.gitignore new file mode 100644 index 0000000..e54525b --- /dev/null +++ b/libmhello/tests/.gitignore @@ -0,0 +1 @@ +driver diff --git a/libmhello/tests/build/.gitignore b/libmhello/tests/build/.gitignore new file mode 100644 index 0000000..225c27f --- /dev/null +++ b/libmhello/tests/build/.gitignore @@ -0,0 +1 @@ +config.build diff --git a/libmhello/tests/build/bootstrap.build b/libmhello/tests/build/bootstrap.build new file mode 100644 index 0000000..2c2de24 --- /dev/null +++ b/libmhello/tests/build/bootstrap.build @@ -0,0 +1,5 @@ +project = # Unnamed subproject. + +using config +using dist +using test diff --git a/libmhello/tests/build/root.build b/libmhello/tests/build/root.build new file mode 100644 index 0000000..58dffed --- /dev/null +++ b/libmhello/tests/build/root.build @@ -0,0 +1,13 @@ +cxx.std = experimental + +using cxx + +cxx{*}: extension = cxx + +# Every exe{} in this subproject is by default a test. +# +exe{*}: test = true + +# Specify the test target for cross-testing. +# +test.target = $cxx.target diff --git a/libmhello/tests/buildfile b/libmhello/tests/buildfile new file mode 100644 index 0000000..1a8bcc9 --- /dev/null +++ b/libmhello/tests/buildfile @@ -0,0 +1 @@ +./: test/ diff --git a/libmhello/tests/test/buildfile b/libmhello/tests/test/buildfile new file mode 100644 index 0000000..7253fc6 --- /dev/null +++ b/libmhello/tests/test/buildfile @@ -0,0 +1,5 @@ +import libs = libmhello%lib{mhello} +import libs += libstd-modules%liba{std-modules} + +exe{driver}: cxx{driver} $libs +exe{driver}: test.output = test.out diff --git a/libmhello/tests/test/driver.cxx b/libmhello/tests/test/driver.cxx new file mode 100644 index 0000000..cf6af49 --- /dev/null +++ b/libmhello/tests/test/driver.cxx @@ -0,0 +1,12 @@ +// file: tests/test/driver.cxx -*- C++ -*- + +import std.core; +import hello; + +int +main () +{ + using hello::say; + + say ("World"); +} diff --git a/libmhello/tests/test/test.out b/libmhello/tests/test/test.out new file mode 100644 index 0000000..8ab686e --- /dev/null +++ b/libmhello/tests/test/test.out @@ -0,0 +1 @@ +Hello, World! -- cgit v1.1