mirror of https://github.com/vitalif/openscad
Search for libraries from a list of paths. Preparations for issue #125
parent
0e6b800155
commit
22c5f37424
|
@ -118,7 +118,7 @@ use[ \t\r\n>]*"<" { BEGIN(cond_use); }
|
||||||
else {
|
else {
|
||||||
usepath = sourcepath() / filename;
|
usepath = sourcepath() / filename;
|
||||||
if (!fs::exists(usepath)) {
|
if (!fs::exists(usepath)) {
|
||||||
usepath = boosty::absolute(fs::path(get_librarydir()) / filename);
|
usepath = locate_file(filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Only accept regular files which exists */
|
/* Only accept regular files which exists */
|
||||||
|
@ -214,7 +214,7 @@ void includefile()
|
||||||
|
|
||||||
fs::path finfo = dirinfo / filename;
|
fs::path finfo = dirinfo / filename;
|
||||||
if (!exists(finfo)) {
|
if (!exists(finfo)) {
|
||||||
finfo = fs::path(get_librarydir()) / filepath / filename;
|
finfo = locate_file((fs::path(filepath) / filename).string());
|
||||||
}
|
}
|
||||||
|
|
||||||
filepath.clear();
|
filepath.clear();
|
||||||
|
|
|
@ -1,27 +1,38 @@
|
||||||
#include "parsersettings.h"
|
#include "parsersettings.h"
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
#include "boosty.h"
|
||||||
#include <qglobal.h> // Needed for Q_ defines - move the offending code somewhere else
|
#include <qglobal.h> // Needed for Q_ defines - move the offending code somewhere else
|
||||||
|
|
||||||
using namespace boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
#include "boosty.h"
|
|
||||||
|
|
||||||
std::string librarydir;
|
std::vector<std::string> librarypath;
|
||||||
|
|
||||||
void set_librarydir(const std::string &libdir)
|
void add_librarydir(const std::string &libdir)
|
||||||
{
|
{
|
||||||
librarydir = libdir;
|
librarypath.push_back(libdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string &get_librarydir()
|
/*!
|
||||||
|
Searces for the given file in library paths and returns the full path if found.
|
||||||
|
Returns an empty path if file cannot be found.
|
||||||
|
*/
|
||||||
|
std::string locate_file(const std::string &filename)
|
||||||
{
|
{
|
||||||
return librarydir;
|
BOOST_FOREACH(const std::string &dir, librarypath) {
|
||||||
|
fs::path usepath = fs::path(dir) / filename;
|
||||||
|
if (fs::exists(usepath)) return usepath.string();
|
||||||
|
}
|
||||||
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
void parser_init(const std::string &applicationpath)
|
void parser_init(const std::string &applicationpath)
|
||||||
{
|
{
|
||||||
|
// FIXME: Append paths from OPENSCADPATH before adding built-in paths
|
||||||
|
|
||||||
std::string librarydir;
|
std::string librarydir;
|
||||||
path libdir(applicationpath);
|
fs::path libdir(applicationpath);
|
||||||
path tmpdir;
|
fs::path tmpdir;
|
||||||
#ifdef Q_WS_MAC
|
#ifdef Q_WS_MAC
|
||||||
libdir /= "../Resources"; // Libraries can be bundled
|
libdir /= "../Resources"; // Libraries can be bundled
|
||||||
if (!is_directory(libdir / "libraries")) libdir /= "../../..";
|
if (!is_directory(libdir / "libraries")) libdir /= "../../..";
|
||||||
|
@ -37,5 +48,5 @@ void parser_init(const std::string &applicationpath)
|
||||||
if (is_directory(tmpdir = libdir / "libraries")) {
|
if (is_directory(tmpdir = libdir / "libraries")) {
|
||||||
librarydir = boosty::stringy( tmpdir );
|
librarydir = boosty::stringy( tmpdir );
|
||||||
}
|
}
|
||||||
set_librarydir(librarydir);
|
if (!librarydir.empty()) add_librarydir(librarydir);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
extern int parser_error_pos;
|
extern int parser_error_pos;
|
||||||
|
|
||||||
void parser_init(const std::string &applicationpath);
|
void parser_init(const std::string &applicationpath);
|
||||||
void set_librarydir(const std::string &libdir);
|
void add_librarydir(const std::string &libdir);
|
||||||
const std::string &get_librarydir();
|
std::string locate_file(const std::string &filename);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
import();
|
|
||||||
translate([-210,0,0]) import(file="../../dxf/polygons.dxf");
|
|
||||||
translate([-210,0,0]) import(file="../../dxf/polygons.dxf", origin=[0,110]);
|
|
||||||
translate([-210,0,0]) import(file="../../dxf/polygons.dxf", origin=[110,110], scale=0.5);
|
|
||||||
import(file="../../dxf/multiple-layers.dxf");
|
|
||||||
translate([-200,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="0");
|
|
||||||
translate([0,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="0");
|
|
||||||
translate([200,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="noname");
|
|
||||||
translate([0,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="Layer with a pretty long name including \\ \"special\" /'\\\\ characters");
|
|
||||||
translate([200,0,0]) import(file="/Users/kintel/code/OpenSCAD/openscad/tests/../testdata/dxf/polygons.dxf");
|
|
|
@ -1,4 +0,0 @@
|
||||||
import_stl("import.stl");
|
|
||||||
translate([2,0,0]) import("import.stl");
|
|
||||||
translate([4,0,0]) import("import_bin.stl");
|
|
||||||
translate([0,2,0]) import("/Users/kintel/code/OpenSCAD/openscad/tests/../testdata/scad/features/import.stl");
|
|
|
@ -139,7 +139,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -112,7 +112,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -98,7 +98,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -91,7 +91,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -77,7 +77,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -258,7 +258,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type)
|
||||||
std::string currentdir = boosty::stringy( fs::current_path() );
|
std::string currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -81,7 +81,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -87,7 +87,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy(fs::current_path());
|
currentdir = boosty::stringy(fs::current_path());
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -89,7 +89,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
|
@ -77,7 +77,7 @@ int main(int argc, char **argv)
|
||||||
currentdir = boosty::stringy( fs::current_path() );
|
currentdir = boosty::stringy( fs::current_path() );
|
||||||
|
|
||||||
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());
|
||||||
set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries"));
|
||||||
|
|
||||||
Context root_ctx;
|
Context root_ctx;
|
||||||
register_builtin(root_ctx);
|
register_builtin(root_ctx);
|
||||||
|
|
Loading…
Reference in New Issue