/* This file is part of hugin. hugin is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. hugin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with hugin. If not, see . */ /** * @file test_simple.cpp * @brief This file was only used for testing during development. * Created on: May 21, 2010 * @author Florian Achleitner */ #include #include #include "Comment.h" #include "Variable.h" #include "VariableDef.h" #include "VariableRef.h" #include "MakefileItem.h" #include "Makefile.h" #include "AutoVariable.h" #include "Newline.h" #include "Rule.h" #include "Conditional.h" #include "StringAdapter.h" #include using namespace makefile; #ifdef USE_WCHAR ostream& out = std::wcout; #else ostream& out = std::cout; #endif int tryall() { Comment comment(cstr("First line")); comment.appendLine(cstr("second line")); comment.appendLine(cstr("third line\nfourth\r line")); out << comment; Variable myname(cstr("MYNAME"), cstr("Flo")); out << myname.getName() << std::endl; out << myname.getValue() << std::endl; out << myname.getDef(); out << myname.getRef() << std::endl; Variable myfullname(cstr("MYFULLNAME"), myname.getRef().toString() + cstr(" Achleitner")); out << myfullname.getDef() << myfullname.getRef() << std::endl; myfullname.setQuoteMode(Makefile::MAKE); out << myfullname.getDef() << myfullname.getRef() << std::endl; try { Variable namesucks(cstr("This name sucks"), cstr("anyvalue")); out << namesucks.getDef(); } catch(std::exception& e) { std::cerr << e.what() << std::endl; } try { Variable valuesucks(cstr("This_value_sucks"), cstr("any\nnewline")); out << valuesucks.getDef(); } catch(std::exception& e) { std::cerr << e.what() << std::endl; } try { Variable valuesucks(cstr("This_value_sucks_not"), cstr("any escaped\\\nnewline")); out << valuesucks.getDef(); } catch(std::exception& e) { std::cerr << e.what() << std::endl; } Variable namesucksless(cstr("This_name_sucks_less"), cstr("~~(bad:){\\value}")); namesucksless.setQuoteMode(Makefile::SHELL); out << namesucksless.getDef(); namesucksless.setQuoteMode(Makefile::MAKE); out << namesucksless.getDef(); AutoVariable autovar(cstr("@")); // out << autovar.getDef(); causes an exception as it should. out << autovar.getRef() << std::endl; return 0; } int tryreplace() { regex toescape; // regex toescape(cstr("(p)|([Da])")); string output; // string output(cstr("(?1--$&--)(?2__$&__)")); toescape.assign(cstr("(\\$\\([^\\)]+\\))|(\\$[^\\(])|([\\\\ \\~\"\\|\\'\\`\\{\\}\\[\\]\\(\\)\\*\\#\\:\\=])")); output.assign(cstr("(?1$&)(?2\\\\\\$$&)(?3\\\\$&)")); string text(cstr("Ein_Dollar$ $ und_paar_andere (Sachen) werden $(richtig) escaped. backslash\\__ ein sternchen * doppelpunkt :=*~")); out << boost::regex_replace(text, toescape, output, boost::match_default | boost::format_all) << std::endl; return 0; out << "SHELL mode" << std::endl << Makefile::quote(text, Makefile::SHELL) << std::endl; out << "MAKE mode" << std::endl << Makefile::quote(text, Makefile::MAKE) << std::endl; return 0; } int trymakefile() { Comment comment(cstr("First line")); comment.appendLine(cstr("second line")); comment.appendLine(cstr("third line\nfourth line\rfifth line")); comment.add(); Variable myname(cstr("MYNAME"), cstr("Flo")); myname.getDef().add(); Variable myfullname(cstr("MYFULLNAME"), myname.getRef().toString() + cstr(" Achleitner")); myfullname.getDef().add(); myfullname.getRef().add(); Newline nl1(2); nl1.add(); Comment c1(cstr("Escaping modes:")); Variable shellvar(cstr("SHELLVAR"), cstr("'has some special (char)s # [or] {not}"), Makefile::SHELL); Variable makevar(cstr("MAKEVAR"), cstr("'has some special (char)s # [or] {not}"), Makefile::MAKE); shellvar.getDef().add(); makevar.getDef().add(); Newline nl2; nl2.add(); Makefile::getSingleton().writeMakefile(out); Makefile::clean(); return 0; } int tryrule() { Comment c(cstr("Try how a rule looks like")); c.add(); Variable t1(cstr("TARGET1"), cstr("t1.o")); t1.getDef().add(); Variable t2(cstr("TARGET2"), cstr("t2.o")); t2.getDef().add(); Variable p1(cstr("PRERE1"), cstr("t1.c")); p1.getDef().add(); Variable p2(cstr("PRERE2"), cstr("t2.c")); p2.getDef().add(); AutoVariable all(cstr("@")); Rule r; r.addTarget(t1.getRef().toString()); r.addTarget(t2.getRef().toString()); r.addPrereq(p1.getRef().toString()); r.addPrereq(p2.getRef().toString()); r.addCommand(cstr("echo ") + all.getRef().toString()); r.add(); r.toString(); Makefile::getSingleton().writeMakefile(out); Makefile::clean(); return 0; } int trycond() { Variable t1(cstr("TARGET1"), cstr("t1.o")); t1.getDef().add(); Variable t2(cstr("TARGET2"), cstr("t2.o")); t2.getDef().add(); Variable p1(cstr("PRERE1"), cstr("t1.c")); p1.getDef().add(); Variable p2(cstr("PRERE2"), cstr("t2.c")); p2.getDef().add(); AutoVariable all(cstr("@")); Rule r; r.addTarget(t1.getRef().toString()); r.addTarget(t2.getRef().toString()); r.addPrereq(p1.getRef().toString()); r.addPrereq(p2.getRef().toString()); r.addCommand(cstr("echo ") + all.getRef().toString()); Variable iftrue(cstr("TRUE"), cstr("if_is_true")); Variable iffales(cstr("FALSE"), cstr("if_is_false")); ConditionalEQ cond1(iftrue.getRef().toString(), cstr("if_is_true")); cond1.addToIf(r); cond1.addToIf(iftrue.getDef()); cond1.addToElse(iffales.getDef()); cond1.addToElse(r); cond1.add(); ConditionalNEQ cond2(iftrue.getRef().toString(), cstr("if_is_true")); cond2.addToIf(r); cond2.addToIf(iftrue.getDef()); cond2.addToElse(iffales.getDef()); cond2.addToElse(r); cond2.add(); ConditionalDEF cond3(iftrue.getName()); cond3.addToIf(r); cond3.addToIf(iftrue.getDef()); cond3.addToElse(iffales.getDef()); cond3.addToElse(r); cond3.add(); ConditionalNDEF cond4(iftrue.getName()); cond4.addToIf(r); cond4.addToIf(iftrue.getDef()); cond4.add(); Makefile::getSingleton().writeMakefile(out); Makefile::clean(); return 0; } int main(int argc, char *argv[]) { return // trymakefile() || // tryreplace() || tryall() || // tryrule() || // trycond() || 0; }