Merge branch 'master' of github.com:openscad/openscad into cmake_workaround

Conflicts:
	tests/virtualfb.sh
felipesanches-svg
don bright 2013-02-03 02:40:26 +01:00
commit 44cddd0b3c
6 changed files with 165 additions and 44 deletions

View File

@ -130,5 +130,12 @@ if [ "`echo $* | grep qt5`" ]; then
setenv_qt5
fi
if [ -e $DEPLOYDIR/include/Qt ]; then
echo "Qt found under $DEPLOYDIR ... "
QTDIR=$DEPLOYDIR
export QTDIR
echo "QTDIR modified to $DEPLOYDIR"
fi
clean_note

View File

@ -24,14 +24,25 @@
#
# Prerequisites:
# - wget or curl
# - Qt4
# - OpenGL (GL/gl.h)
# - GLU (GL/glu.h)
# - gcc
# - Qt4
#
# Enable Clang (experimental, only works on linux):
# If your system lacks qt4, build like this:
#
# ./scripts/uni-build-dependencies.sh qt4
# . ./scripts/setenv-unibuild.sh
#
# If your system lacks glu, try to build like this:
#
# ./scripts/uni-build-dependencies.sh glu
#
# If you want to try Clang compiler (experimental, only works on linux):
#
# . ./scripts/setenv-unibuild.sh clang
#
# Enable Qt5 (experimental)
# If you want to try Qt5 (experimental)
#
# . ./scripts/setenv-unibuild.sh qt5
#
@ -42,6 +53,51 @@ printUsage()
echo
}
build_glu()
{
version=$1
if [ -e $DEPLOYDIR/lib/libGLU.so ]; then
echo "GLU already installed. not building"
return
fi
echo "Building GLU" $version "..."
cd $BASEDIR/src
rm -rf glu-$version
if [ ! -f glu-$version.tar.gz ]; then
curl -O http://cgit.freedesktop.org/mesa/glu/snapshot/glu-$version.tar.gz
fi
tar xzf glu-$version.tar.gz
cd glu-$version
./autogen.sh --prefix=$DEPLOYDIR
make -j$NUMCPU
make install
}
build_qt4()
{
version=$1
if [ -e $DEPLOYDIR/include/Qt ]; then
echo "qt already installed. not building"
return
fi
echo "Building Qt" $version "..."
cd $BASEDIR/src
rm -rf qt-everywhere-opensource-src-$version
if [ ! -f qt-everywhere-opensource-src-$version.tar.gz ]; then
curl -O http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-$version.tar.gz
fi
tar xzf qt-everywhere-opensource-src-$version.tar.gz
cd qt-everywhere-opensource-src-$version
./configure -prefix $DEPLOYDIR -opensource -confirm-license -fast -no-qt3support -no-svg -no-phonon -no-audio-backend -no-multimedia -no-javascript-jit -no-script -no-scripttools -no-declarative -no-xmlpatterns -nomake demos -nomake examples -nomake docs -nomake translations -no-webkit
make -j$NUMCPU
make install
QTDIR=$DEPLOYDIR
export QTDIR
echo "----------"
echo " Please set QTDIR to $DEPLOYDIR ( or run '. scripts/setenv-unibuild.sh' )"
echo "----------"
}
build_bison()
{
version=$1
@ -196,7 +252,12 @@ build_boost()
fi
else
$BJAMBIN -j$NUMCPU
$BJAMBIN install
if [ $? = 0 ]; then
$BJAMBIN install
else
echo boost build failed
exit 1
fi
fi
}
@ -211,19 +272,28 @@ build_cgal()
cd $BASEDIR/src
rm -rf CGAL-$version
if [ ! -f CGAL-$version.tar.* ]; then
#4.0.2
curl --insecure -O https://gforge.inria.fr/frs/download.php/31174/CGAL-$version.tar.bz2
# 4.0 curl --insecure -O https://gforge.inria.fr/frs/download.php/30387/CGAL-$version.tar.gz
# 3.9 curl --insecure -O https://gforge.inria.fr/frs/download.php/29125/CGAL-$version.tar.gz
# 4.1
curl --insecure -O https://gforge.inria.fr/frs/download.php/31640/CGAL-$version.tar.bz2
# 4.0.2 curl --insecure -O https://gforge.inria.fr/frs/download.php/31174/CGAL-$version.tar.bz2
# 4.0 curl --insecure -O https://gforge.inria.fr/frs/download.php/30387/CGAL-$version.tar.gz #4.0
# 3.9 curl --insecure -O https://gforge.inria.fr/frs/download.php/29125/CGAL-$version.tar.gz #3.9
# 3.8 curl --insecure -O https://gforge.inria.fr/frs/download.php/28500/CGAL-$version.tar.gz
# 3.7 curl --insecure -O https://gforge.inria.fr/frs/download.php/27641/CGAL-$version.tar.gz
fi
tar jxf CGAL-$version.tar.bz2
tar xf CGAL-$version.tar.bz2
cd CGAL-$version
if [ "`echo $2 | grep use-sys-libs`" ]; then
cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DCMAKE_BUILD_TYPE=Debug
mkdir bin
cd bin
rm -rf ./*
if [ "`uname -a| grep ppc64`" ]; then
CGAL_BUILDTYPE="Release" # avoid assertion violation
else
cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DGMP_INCLUDE_DIR=$DEPLOYDIR/include -DGMP_LIBRARIES=$DEPLOYDIR/lib/libgmp.so -DGMPXX_LIBRARIES=$DEPLOYDIR/lib/libgmpxx.so -DGMPXX_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_LIBRARIES=$DEPLOYDIR/lib/libmpfr.so -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DBOOST_ROOT=$DEPLOYDIR -DCMAKE_BUILD_TYPE=Debug
CGAL_BUILDTYPE="Debug"
fi
if [ "`echo $2 | grep use-sys-libs`" ]; then
cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DCMAKE_BUILD_TYPE=$CGAL_BUILDTYPE ..
else
cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DGMP_INCLUDE_DIR=$DEPLOYDIR/include -DGMP_LIBRARIES=$DEPLOYDIR/lib/libgmp.so -DGMPXX_LIBRARIES=$DEPLOYDIR/lib/libgmpxx.so -DGMPXX_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_LIBRARIES=$DEPLOYDIR/lib/libmpfr.so -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DBOOST_ROOT=$DEPLOYDIR -DCMAKE_BUILD_TYPE=$CGAL_BUILD_TYPE ..
fi
make -j$NUMCPU
make install
@ -284,7 +354,7 @@ build_glew()
build_opencsg()
{
if [ -e $DEPLOYDIR/include/opencsg.h ]; then
if [ -e $DEPLOYDIR/lib/libopencsg.so ]; then
echo "OpenCSG already installed. not building"
return
fi
@ -438,6 +508,16 @@ if [ $1 ]; then
build_opencsg 1.3.2
exit
fi
if [ $1 == "qt4" ]; then
# such a huge build, put here by itself
build_qt4 4.8.4
exit
fi
if [ $1 == "glu" ]; then
# Mesa and GLU split in late 2012, so it's not on some systems
build_glu 9.0.0
exit
fi
fi
@ -445,13 +525,12 @@ fi
# Main build of libraries
# edit version numbers here as needed.
#
build_eigen 3.1.1
build_gmp 5.0.5
build_mpfr 3.1.1
build_boost 1.49.0
# NB! For CGAL, also update the actual download URL in the function
build_cgal 4.0.2
build_cgal 4.1
build_glew 1.9.0
build_opencsg 1.3.2

View File

@ -52,6 +52,9 @@ namespace fs = boost::filesystem;
using namespace boost::assign; // bring 'operator+=()' into scope
#include "boosty.h"
#include <boost/detail/endian.hpp>
#include <boost/cstdint.hpp>
class ImportModule : public AbstractModule
{
public:
@ -112,6 +115,47 @@ AbstractNode *ImportModule::evaluate(const Context *ctx, const ModuleInstantiati
return node;
}
#define STL_FACET_NUMBYTES 4*3*4+2
// as there is no 'float32_t' standard, we assume the systems 'float'
// is a 'binary32' aka 'single' standard IEEE 32-bit floating point type
union stl_facet {
uint8_t data8[ STL_FACET_NUMBYTES ];
uint32_t data32[4*3];
struct facet_data {
float i, j, k;
float x1, y1, z1;
float x2, y2, z2;
float x3, y3, z3;
uint16_t attribute_byte_count;
} data;
};
void uint32_byte_swap( uint32_t &x )
{
#if defined(__GNUC__) || defined(__clang__)
x = __builtin_bswap32( x );
#elif defined(_MSC_VER)
x = _byteswap_ulong( x );
#else
uint32_t b1 = ( 0x000000FF & x ) << 24;
uint32_t b2 = ( 0x0000FF00 & x ) << 8;
uint32_t b3 = ( 0x00FF0000 & x ) >> 8;
uint32_t b4 = ( 0xFF000000 & x ) >> 24;
x = b1 | b2 | b3 | b4;
#endif
}
void read_stl_facet( std::ifstream &f, stl_facet &facet )
{
f.read( (char*)facet.data8, STL_FACET_NUMBYTES );
#ifdef BOOST_BIG_ENDIAN
for ( int i = 0; i < 12; i++ ) {
uint32_byte_swap( facet.data32[ i ] );
}
// we ignore attribute byte count
#endif
}
PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const
{
PolySet *p = NULL;
@ -137,9 +181,11 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const
int file_size = f.tellg();
f.seekg(80);
if (!f.eof()) {
int facenum = 0;
// FIXME: Assumes little endian
f.read((char *)&facenum, sizeof(int));
uint32_t facenum = 0;
f.read((char *)&facenum, sizeof(uint32_t));
#ifdef BOOST_BIG_ENDIAN
uint32_byte_swap( facenum );
#endif
if (file_size == 80 + 4 + 50*facenum) binary = true;
}
f.seekg(0);
@ -186,32 +232,14 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const
else
{
f.ignore(80-5+4);
// FIXME: Assumes little endian
while (1) {
#ifdef _MSC_VER
#pragma pack(push,1)
#endif
struct {
float i, j, k;
float x1, y1, z1;
float x2, y2, z2;
float x3, y3, z3;
unsigned short acount;
}
#ifdef __GNUC__
__attribute__ ((packed))
#endif
stldata;
#ifdef _MSC_VER
#pragma pack(pop)
#endif
f.read((char*)&stldata, sizeof(stldata));
stl_facet facet;
read_stl_facet( f, facet );
if (f.eof()) break;
p->append_poly();
p->append_vertex(stldata.x1, stldata.y1, stldata.z1);
p->append_vertex(stldata.x2, stldata.y2, stldata.z2);
p->append_vertex(stldata.x3, stldata.y3, stldata.z3);
p->append_vertex(facet.data.x1, facet.data.y1, facet.data.z1);
p->append_vertex(facet.data.x2, facet.data.y2, facet.data.z2);
p->append_vertex(facet.data.x3, facet.data.y3, facet.data.z3);
}
}
}

View File

@ -179,6 +179,11 @@ endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON)
find_package(OpenGL REQUIRED)
if ( "${OPENGL_glu_LIBRARY}" MATCHES "NOTFOUND" )
# GLU and Mesa split in late 2012 so some systems dont have GLU
find_library(OPENGL_glu_LIBRARY GLU HINTS "$ENV{OPENSCAD_LIBRARIES}/lib" REQUIRED)
set( OPENGL_LIBRARY ${OPENGL_glu_LIBRARY} ${OPENGL_LIBRARY} )
endif()
if (MINGW_CROSS_ENV_DIR)
mingw_cross_env_find_qt()

View File

@ -36,8 +36,10 @@ if( __cmake_system_name__ MATCHES "Linux|BSD")
message("Process ID of vfb: ${VFB_PID}")
endif()
if ("${VFB_DISPLAY}" STREQUAL "" OR "${VFB_PID}" STREQUAL "")
message("Virtual framebuffer had a problem starting.")
execute_process("cat virtualfblog")
set(VFBLOG "virtualfb.log")
message("Virtual framebuffer had a problem starting. Printing ${VFBLOG}")
execute_process(COMMAND cat virtualfb.log OUTPUT_VARIABLE VFBLOGTXT)
message("Log: ${VFBLOGTXT}")
else()
message("Virtual framebuffer started. DISPLAY=${VFB_DISPLAY}, PID=${VFB_PID}")
endif()

View File

@ -101,7 +101,7 @@ def compare_png(resultfilename):
msg += '\n expected image: ' + expectedfilename + '\n'
print >> sys.stderr, msg
if not resultfilename:
print >> sys.stderr, "Error: OpenSCAD did not generate an image to test"
print >> sys.stderr, "Error: OpenSCAD error during test image generation"
return False
print >> sys.stderr, ' actual image: ', resultfilename