mirror of https://github.com/vitalif/openscad
windows - library path find, also windows build fixes
parent
31c88a434b
commit
08952ee216
|
@ -6,7 +6,7 @@ boost {
|
|||
!isEmpty(BOOST_DIR) {
|
||||
QMAKE_INCDIR += $$BOOST_DIR
|
||||
message("boost location: $$BOOST_DIR")
|
||||
win32: QMAKE_LIBDIR += -L$$BOOST_DIR/lib
|
||||
win*: QMAKE_LIBDIR += -L$$BOOST_DIR/lib
|
||||
}
|
||||
|
||||
CONFIG(mingw-cross-env) {
|
||||
|
@ -16,7 +16,7 @@ boost {
|
|||
BOOST_LINK_FLAGS = -lboost_thread_win32-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt -lboost_chrono-mt
|
||||
}
|
||||
|
||||
isEmpty(BOOST_LINK_FLAGS):win32 {
|
||||
isEmpty(BOOST_LINK_FLAGS):win* {
|
||||
BOOST_LINK_FLAGS = -llibboost_thread-vc90-mt-s-1_46_1 -llibboost_program_options-vc90-mt-s-1_46_1 -llibboost_filesystem-vc90-mt-s-1_46_1 -llibboost_system-vc90-mt-s-1_46_1 -llibboost_regex-vc90-mt-s-1_46_1
|
||||
}
|
||||
|
||||
|
|
4
cgal.pri
4
cgal.pri
|
@ -6,7 +6,7 @@ cgal {
|
|||
CGAL_DIR = $$(CGALDIR)
|
||||
!isEmpty(CGAL_DIR) {
|
||||
QMAKE_INCDIR += $$CGAL_DIR/include
|
||||
win32: QMAKE_INCDIR += $$CGAL_DIR/auxiliary/gmp/include
|
||||
win*: QMAKE_INCDIR += $$CGAL_DIR/auxiliary/gmp/include
|
||||
QMAKE_LIBDIR += $$CGAL_DIR/lib
|
||||
message("CGAL location: $$CGAL_DIR")
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ cgal {
|
|||
LIBS += -lgmp -lmpfr -lCGAL
|
||||
QMAKE_CXXFLAGS += -frounding-math
|
||||
} else {
|
||||
win32 {
|
||||
win* {
|
||||
*-g++* {
|
||||
QMAKE_CXXFLAGS += -frounding-math
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ MOC_DIR = objects
|
|||
UI_DIR = objects
|
||||
RCC_DIR = objects
|
||||
|
||||
include(win32.pri)
|
||||
include(win.pri)
|
||||
include(flex.pri)
|
||||
include(bison.pri)
|
||||
include(cgal.pri)
|
||||
|
|
|
@ -279,7 +279,7 @@ Response CGALEvaluator::visit(State &state, const CsgNode &node)
|
|||
if (state.isPostfix()) {
|
||||
CGAL_Nef_polyhedron N;
|
||||
if (!isCached(node)) {
|
||||
CGALEvaluator::CsgOp op;
|
||||
CGALEvaluator::CsgOp op = CGE_UNION;
|
||||
switch (node.type) {
|
||||
case CSG_TYPE_UNION:
|
||||
op = CGE_UNION;
|
||||
|
@ -291,7 +291,6 @@ Response CGALEvaluator::visit(State &state, const CsgNode &node)
|
|||
op = CGE_INTERSECTION;
|
||||
break;
|
||||
default:
|
||||
op = -1;
|
||||
assert(false);
|
||||
}
|
||||
N = applyToChildren(node, op);
|
||||
|
|
|
@ -124,7 +124,7 @@ Response CSGTermEvaluator::visit(State &state, const AbstractPolyNode &node)
|
|||
Response CSGTermEvaluator::visit(State &state, const CsgNode &node)
|
||||
{
|
||||
if (state.isPostfix()) {
|
||||
CsgOp op;
|
||||
CsgOp op = CSGT_UNION;
|
||||
switch (node.type) {
|
||||
case CSG_TYPE_UNION:
|
||||
op = CSGT_UNION;
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
#include "PlatformUtils.h"
|
||||
#include "printutils.h"
|
||||
#include <windows.h>
|
||||
#define _WIN32_IE 0x0501 // SHGFP_TYPE_CURRENT
|
||||
#include <shlobj.h>
|
||||
|
||||
// convert from windows api w_char strings (usually utf16) to utf8 std::string
|
||||
std::string winapi_wstr_to_utf8( std::wstring wstr )
|
||||
{
|
||||
std::string utf8_str("");
|
||||
|
||||
UINT CodePage = CP_UTF8;
|
||||
DWORD dwFlags = 0;
|
||||
LPCSTR lpMultiByteStr = NULL;
|
||||
int cbMultiByte = 0;
|
||||
LPWSTR lpWideCharStr = &wstr[0];
|
||||
int cchWideChar = (int)wstr.size();
|
||||
|
||||
int numbytes = MultiByteToWideChar( CodePage, dwFlags, lpMultiByteStr,
|
||||
cbMultiByte, lpWideCharStr, cchWideChar );
|
||||
|
||||
cbMultiByte = numbytes;
|
||||
lpMultiByteStr = &utf8_str[0];
|
||||
|
||||
int result = MultiByteToWideChar( CodePage, dwFlags, lpMultiByteStr,
|
||||
cbMultiByte, lpWideCharStr, cchWideChar );
|
||||
|
||||
if (result != numbytes) {
|
||||
PRINT("ERROR: error converting w_char str to utf8 string");
|
||||
}
|
||||
|
||||
return utf8_str;
|
||||
}
|
||||
|
||||
|
||||
// retrieve the path to 'My Documents' for the current user under windows
|
||||
// In XP this is 'c:\documents and settings\username\my documents'
|
||||
// In Vista, 7, 8+ this is 'c:\users\username\documents'
|
||||
// This code may have problems with unusual dir types in Vista because
|
||||
// Mingw does not provide access to the updated SHGetKnownFolderPath
|
||||
std::string PlatformUtils::documentsPath()
|
||||
{
|
||||
std::string retval;
|
||||
std::wstring path(MAX_PATH,0);
|
||||
|
||||
HRESULT result = SHGetFolderPathW(NULL, CSIDL_PERSONAL, NULL,
|
||||
SHGFP_TYPE_CURRENT, &path[0]);
|
||||
|
||||
if (result == S_OK) {
|
||||
path = std::wstring( path.c_str() ); // stip extra NULLs
|
||||
retval = winapi_wstr_to_utf8( path );
|
||||
} else {
|
||||
PRINT("ERROR: Could not find My Documents location");
|
||||
retval = "";
|
||||
}
|
||||
return retval;
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
#include "PlatformUtils.h"
|
||||
#include <windows.h>
|
||||
#include <shlobj.h>
|
||||
|
||||
std::string PlatformUtils::documentsPath()
|
||||
{
|
||||
std::string retval;
|
||||
CHAR my_documents[MAX_PATH];
|
||||
HRESULT result = SHGetFolderPath(NULL, CSIDL_MYDOCUMENTS, NULL,
|
||||
SHGFP_TYPE_CURRENT, my_documents);
|
||||
|
||||
if (result != S_OK) retval = "";
|
||||
else retval = my_documents;
|
||||
return retval;
|
||||
}
|
|
@ -1,26 +1,35 @@
|
|||
#include "PlatformUtils.h"
|
||||
#include "boosty.h"
|
||||
|
||||
bool PlatformUtils::createLibraryPath()
|
||||
{
|
||||
std::string path = PlatformUtils::libraryPath();
|
||||
bool OK = false;
|
||||
try {
|
||||
if (!fs::exists(fs::path(path))) {
|
||||
PRINTB("Creating library folder %s", path );
|
||||
OK = fs::create_directories( path );
|
||||
}
|
||||
if (!OK) {
|
||||
PRINTB("ERROR: Cannot create %s", path );
|
||||
}
|
||||
} catch (const fs::filesystem_error& ex) {
|
||||
PRINTB("ERROR: %s",ex.what());
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
std::string PlatformUtils::libraryPath()
|
||||
{
|
||||
fs::path path;
|
||||
bool OK = true;
|
||||
try {
|
||||
path = boosty::canonical(fs::path(PlatformUtils::documentsPath()));
|
||||
if (path.empty()) return "";
|
||||
PRINTB("path size %i",boosty::stringy(path).size());
|
||||
path /= "OpenSCAD";
|
||||
path /= "libraries";
|
||||
PRINTB("Appended path %s", path );
|
||||
PRINTB("Exists: %i", fs::exists(path) );
|
||||
if (!fs::exists(path)) {
|
||||
PRINTB("Creating library folder %s", boosty::stringy(path) );
|
||||
OK &= fs::create_directories( path );
|
||||
}
|
||||
if (!OK) {
|
||||
PRINTB("ERROR: Cannot find nor create %s", boosty::stringy(path) );
|
||||
path = fs::path("");
|
||||
}
|
||||
//PRINTB("path size %i",boosty::stringy(path).size());
|
||||
//PRINTB("Appended path %s", path );
|
||||
//PRINTB("Exists: %i", fs::exists(path) );
|
||||
} catch (const fs::filesystem_error& ex) {
|
||||
PRINTB("ERROR: %s",ex.what());
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ namespace PlatformUtils {
|
|||
|
||||
std::string documentsPath();
|
||||
std::string libraryPath();
|
||||
bool createLibraryPath();
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue