diff options
-rw-r--r-- | icespider/compile/Jamfile.jam | 1 | ||||
-rw-r--r-- | icespider/compile/main.cpp | 17 | ||||
-rw-r--r-- | icespider/compile/routeCompiler.cpp | 2 | ||||
-rw-r--r-- | icespider/compile/routeCompiler.h | 4 | ||||
-rw-r--r-- | icespider/unittests/testCompile.cpp | 6 |
5 files changed, 23 insertions, 7 deletions
diff --git a/icespider/compile/Jamfile.jam b/icespider/compile/Jamfile.jam index 5d31fb1..9e0636a 100644 --- a/icespider/compile/Jamfile.jam +++ b/icespider/compile/Jamfile.jam @@ -26,6 +26,7 @@ lib icespider-compile : <library>boost_system <library>boost_filesystem <library>../common + <implicit-dependency>../common ; exe icespider : diff --git a/icespider/compile/main.cpp b/icespider/compile/main.cpp index e96574e..6a8af6c 100644 --- a/icespider/compile/main.cpp +++ b/icespider/compile/main.cpp @@ -1,20 +1,35 @@ #include <boost/program_options.hpp> +#include "routeCompiler.h" + namespace po = boost::program_options; int main(int c, char ** v) { - std::string input, output; + bool showHelp; + IceSpider::Compile::RouteCompiler rc; + boost::filesystem::path input, output; po::options_description opts("IceSpider compile options"); opts.add_options() ("input", po::value(&input), "Input .json file") ("output", po::value(&output), "Output .cpp file") + ("include,I", po::value(&rc.searchPath)->composing(), "Search path") + ("help,h", po::value(&showHelp)->default_value(false)->zero_tokens(), "Help") ; po::positional_options_description pod; pod.add("input", 1).add("output", 2); po::variables_map vm; po::store(po::command_line_parser(c, v).options(opts).positional(pod).run(), vm); po::notify(vm); + + if (showHelp || input.empty() || output.empty()) { + std::cout << opts << std::endl; + return 1; + } + + rc.searchPath.push_back(input.parent_path()); + rc.compile(input, output); + return 0; } diff --git a/icespider/compile/routeCompiler.cpp b/icespider/compile/routeCompiler.cpp index bce8095..177cd22 100644 --- a/icespider/compile/routeCompiler.cpp +++ b/icespider/compile/routeCompiler.cpp @@ -27,7 +27,7 @@ namespace IceSpider { RouteCompiler::RouteCompiler() { - searchPath.insert(boost::filesystem::current_path()); + searchPath.push_back(boost::filesystem::current_path()); } UserIceSpider::RouteConfigurationPtr diff --git a/icespider/compile/routeCompiler.h b/icespider/compile/routeCompiler.h index 2ac1f4b..9d17675 100644 --- a/icespider/compile/routeCompiler.h +++ b/icespider/compile/routeCompiler.h @@ -3,7 +3,7 @@ #include <boost/filesystem/path.hpp> #include <visibility.h> -#include <set> +#include <vector> #include <routes.h> #include <Slice/Parser.h> #include <Ice/BuiltinSequences.h> @@ -22,7 +22,7 @@ namespace IceSpider { void applyDefaults(UserIceSpider::RouteConfigurationPtr, const Units & u) const; void compile(const boost::filesystem::path & input, const boost::filesystem::path & output) const; - std::set<boost::filesystem::path> searchPath; + std::vector<boost::filesystem::path> searchPath; private: void processConfiguration(FILE * output, UserIceSpider::RouteConfigurationPtr, const Units &) const; diff --git a/icespider/unittests/testCompile.cpp b/icespider/unittests/testCompile.cpp index c53fe65..d46a33d 100644 --- a/icespider/unittests/testCompile.cpp +++ b/icespider/unittests/testCompile.cpp @@ -22,7 +22,7 @@ BOOST_FIXTURE_TEST_SUITE(cf, CoreFixture) BOOST_AUTO_TEST_CASE( testLoadConfiguration ) { IceSpider::Compile::RouteCompiler rc; - rc.searchPath.insert(rootDir); + rc.searchPath.push_back(rootDir); auto cfg = rc.loadConfiguration(rootDir / "testRoutes.json"); auto u = rc.loadUnits(cfg); rc.applyDefaults(cfg, u); @@ -55,13 +55,13 @@ BOOST_AUTO_TEST_CASE( testLoadConfiguration ) BOOST_AUTO_TEST_CASE( testCompile ) { IceSpider::Compile::RouteCompiler rc; - rc.searchPath.insert(rootDir); + rc.searchPath.push_back(rootDir); auto input = rootDir / "testRoutes.json"; auto output = binDir / "testRoutes.cpp"; auto outputso = boost::filesystem::change_extension(output, ".so"); auto libGenDir = (rootDir / "bin" / modeDir); rc.compile(input, output); - + auto compileCommand = boost::algorithm::join<std::vector<std::string>>({ "gcc", "-shared", "-std=c++1y", "-fPIC", " -fvisibility=hidden", "-O3", "-Wl,--warn-once,--gc-sections", "-I", "/usr/include/adhocutil", |