Go to file
whitequark 1249f8496e Enable exhaustive switch coverage warnings as an error, and use them.
Specifically, this enables -Wswitch=error on GCC/Clang and its MSVC
equivalent; the exact way it is handled varies slightly, but what
they all have in common is that in a switch statement over an
enumeration, any enumerand that is not explicitly (via case:) or
implicitly (via default:) handled in the switch triggers an error.

Moreover, we also change the switch statements in three ways:

  * Switch statements that ought to be extended every time a new
    enumerand is added (e.g. Entity::DrawOrGetDistance(), are changed
    to explicitly list every single enumerand, and not have a
    default: branch.

    Note that the assertions are kept because it is legal for
    a enumeration to have a value unlike any of its defined
    enumerands, and we can e.g. read garbage from a file, or
    an uninitialized variable. This requires some rearranging if
    a default: branch is undesired.

  * Switch statements that ought to only ever see a few select
    enumerands, are changed to always assert in the default: branch.

  * Switch statements that do something meaningful for a few
    enumerands, and ignore everything else, are changed to do nothing
    in a default: branch, under the assumption that changing them
    every time an enumerand is added or removed would just result
    in noise and catch no bugs.

This commit also removes the {Request,Entity,Constraint}::UNKNOWN and
Entity::DATUM_POINT enumerands, as those were just fancy names for
zeroes. They mess up switch exhaustiveness checks and most of the time
were not the best way to implement what they did anyway.
2016-05-26 12:43:52 +00:00
.travis CMake: require GCC 5.0+. 2016-05-18 17:27:37 +00:00
cmake Embed git commit hash in the "About" dialog. 2016-04-23 22:53:21 +00:00
debian CMake: require GCC 5.0+. 2016-05-18 17:27:37 +00:00
exposed Rewrite declarations of form f(void) as f(). 2016-05-20 12:43:20 +00:00
extlib DXF: export "actual measurement" for dimensions. 2016-05-17 12:34:35 +00:00
include Enable -Wall -Wextra -Wno-unused-parameter on GCC/Clang. 2016-05-08 00:01:35 +00:00
res Fix glyph for U+0454 є in vector font. 2016-05-20 21:42:49 +00:00
src Enable exhaustive switch coverage warnings as an error, and use them. 2016-05-26 12:43:52 +00:00
.gitattributes Added a .gitattributes file 2013-11-19 18:17:55 -05:00
.gitignore Build Debian packages with debug symbols. 2016-01-13 06:45:17 +00:00
.gitmodules Move everything from whitequark/solvespace to solvespace/solvespace. 2016-04-23 19:39:39 +00:00
.travis.yml Move everything from whitequark/solvespace to solvespace/solvespace. 2016-04-23 19:39:39 +00:00
appveyor.yml Update CI scripts to respect the vA.B tag name format. 2016-05-17 14:53:36 +00:00
CMakeLists.txt Enable exhaustive switch coverage warnings as an error, and use them. 2016-05-26 12:43:52 +00:00
COPYING.txt Changes in preparation for the release of SolveSpace under the GPL, 2013-07-28 14:08:34 -08:00
README.md Move everything from whitequark/solvespace to solvespace/solvespace. 2016-04-23 19:39:39 +00:00
wishlist.txt Make oops() calls exit instead of entering debugger by default, 2011-03-05 12:52:57 -08:00

SolveSpace

This repository contains the source code of SolveSpace, a parametric 2d/3d CAD.

Installation

Mac OS X (>=10.6 64-bit), Debian (>=jessie) and Ubuntu (>=trusty)

Binary packages for Mac OS X and Debian derivatives are available via GitHub releases.

Other systems

See below.

Building on Linux

Building for Linux

You will need CMake, libpng, zlib, json-c, fontconfig, freetype, gtkmm 2.4, pangomm 1.4, OpenGL and OpenGL GLU. On a Debian derivative (e.g. Ubuntu) these can be installed with:

apt-get install libpng12-dev libjson-c-dev libfreetype6-dev \
                libfontconfig1-dev libgtkmm-2.4-dev libpangomm-1.4-dev \
                libgl-dev libglu-dev libglew-dev cmake

Before building, check out the necessary submodules:

git submodule update --init extlib/libdxfrw

After that, build SolveSpace as following:

mkdir build
cd build
cmake ..
make
sudo make install

A fully functional port to GTK3 is available, but not recommended for use due to bugs in this toolkit.

Building for Windows

You will need CMake, a Windows cross-compiler, and Wine with binfmt support. On a Debian derivative (e.g. Ubuntu) these can be installed with:

apt-get install cmake mingw-w64 wine-binfmt

Before building, check out the necessary submodules:

git submodule update --init

After that, build 32-bit SolveSpace as following:

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake ..
make solvespace

Or, build 64-bit SolveSpace as following:

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake ..
make solvespace

The application is built as build/src/solvespace.exe.

Space Navigator support will not be available.

Building on Mac OS X

You will need XCode tools, CMake, libpng and Freetype. Assuming you use homebrew, these can be installed with:

brew install cmake libpng freetype

XCode has to be installed via AppStore; it requires a free Apple ID.

Before building, check out the necessary submodules:

git submodule update --init extlib/libdxfrw

After that, build SolveSpace as following:

mkdir build
cd build
cmake ..
make

The app bundle is built in build/src/solvespace.app.

Building on Windows

You will need cmake and Visual C++.

GUI build

Check out the git submodules. Create a directory build in the source tree and point cmake-gui to the source tree and that directory. Press "Configure" and "Generate", then open build\solvespace.sln with Visual C++ and build it.

Command-line build

First, ensure that git and cl (the Visual C++ compiler driver) are in your %PATH%; the latter is usually done by invoking vcvarsall.bat from your Visual Studio install. Then, run the following in cmd or PowerShell:

git submodule update --init
mkdir build
cd build
cmake .. -G "NMake Makefiles"
nmake

MSVC build

It is also possible to build SolveSpace using MinGW, though Space Navigator support will be disabled.

First, ensure that git and gcc are in your $PATH. Then, run the following in bash:

git submodule update --init
mkdir build
cd build
cmake ..
make

License

SolveSpace is distributed under the terms of the GPL3 license.