forked from openscad/openscad
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add first python module (`cube()`). Switch hash library from crypto++ to nettle. --------- Co-authored-by: Guenther Sohler <[email protected]> Co-authored-by: Torsten Paul <[email protected]>
- Loading branch information
Showing
10 changed files
with
711 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
# Copyright (C) 2020 Dieter Baron and Thomas Klausner | ||
# | ||
# The authors can be contacted at <[email protected]> | ||
# | ||
# Redistribution and use in source and binary forms, with or without | ||
# modification, are permitted provided that the following conditions | ||
# are met: | ||
# | ||
# 1. Redistributions of source code must retain the above copyright | ||
# notice, this list of conditions and the following disclaimer. | ||
# | ||
# 2. Redistributions in binary form must reproduce the above copyright | ||
# notice, this list of conditions and the following disclaimer in | ||
# the documentation and/or other materials provided with the | ||
# distribution. | ||
# | ||
# 3. The names of the authors may not be used to endorse or promote | ||
# products derived from this software without specific prior | ||
# written permission. | ||
# | ||
# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS | ||
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY | ||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | ||
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER | ||
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN | ||
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
|
||
#[=======================================================================[.rst: | ||
FindNettle | ||
------- | ||
Finds the Nettle library. | ||
Imported Targets | ||
^^^^^^^^^^^^^^^^ | ||
This module provides the following imported targets, if found: | ||
``Nettle::Nettle`` | ||
The Nettle library | ||
Result Variables | ||
^^^^^^^^^^^^^^^^ | ||
This will define the following variables: | ||
``Nettle_FOUND`` | ||
True if the system has the Nettle library. | ||
``Nettle_VERSION`` | ||
The version of the Nettle library which was found. | ||
``Nettle_INCLUDE_DIRS`` | ||
Include directories needed to use Nettle. | ||
``Nettle_LIBRARIES`` | ||
Libraries needed to link to Nettle. | ||
Cache Variables | ||
^^^^^^^^^^^^^^^ | ||
The following cache variables may also be set: | ||
``Nettle_INCLUDE_DIR`` | ||
The directory containing ``nettle/aes.h``. | ||
``Nettle_LIBRARY`` | ||
The path to the Nettle library. | ||
#]=======================================================================] | ||
|
||
find_package(PkgConfig) | ||
pkg_check_modules(PC_Nettle QUIET nettle) | ||
|
||
find_path(Nettle_INCLUDE_DIR | ||
NAMES nettle/aes.h nettle/md5.h nettle/pbkdf2.h nettle/ripemd160.h nettle/sha.h | ||
PATHS ${PC_Nettle_INCLUDE_DIRS} | ||
) | ||
find_library(Nettle_LIBRARY | ||
NAMES nettle | ||
PATHS ${PC_Nettle_LIBRARY_DIRS} | ||
) | ||
|
||
# Extract version information from the header file | ||
if(Nettle_INCLUDE_DIR) | ||
# This file only exists in nettle>=3.0 | ||
if(EXISTS ${Nettle_INCLUDE_DIR}/nettle/version.h) | ||
file(STRINGS ${Nettle_INCLUDE_DIR}/nettle/version.h _ver_major_line | ||
REGEX "^#define NETTLE_VERSION_MAJOR *[0-9]+" | ||
LIMIT_COUNT 1) | ||
string(REGEX MATCH "[0-9]+" | ||
Nettle_MAJOR_VERSION "${_ver_major_line}") | ||
file(STRINGS ${Nettle_INCLUDE_DIR}/nettle/version.h _ver_minor_line | ||
REGEX "^#define NETTLE_VERSION_MINOR *[0-9]+" | ||
LIMIT_COUNT 1) | ||
string(REGEX MATCH "[0-9]+" | ||
Nettle_MINOR_VERSION "${_ver_minor_line}") | ||
set(Nettle_VERSION "${Nettle_MAJOR_VERSION}.${Nettle_MINOR_VERSION}") | ||
unset(_ver_major_line) | ||
unset(_ver_minor_line) | ||
else() | ||
if(PC_Nettle_VERSION) | ||
set(Nettle_VERSION ${PC_Nettle_VERSION}) | ||
else() | ||
set(Nettle_VERSION "1.0") | ||
endif() | ||
endif() | ||
endif() | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(Nettle | ||
FOUND_VAR Nettle_FOUND | ||
REQUIRED_VARS | ||
Nettle_LIBRARY | ||
Nettle_INCLUDE_DIR | ||
VERSION_VAR Nettle_VERSION | ||
) | ||
|
||
if(Nettle_FOUND) | ||
set(Nettle_LIBRARIES ${Nettle_LIBRARY}) | ||
set(Nettle_INCLUDE_DIRS ${Nettle_INCLUDE_DIR}) | ||
set(Nettle_DEFINITIONS ${PC_Nettle_CFLAGS_OTHER}) | ||
endif() | ||
|
||
if(Nettle_FOUND AND NOT TARGET Nettle::Nettle) | ||
add_library(Nettle::Nettle UNKNOWN IMPORTED) | ||
set_target_properties(Nettle::Nettle PROPERTIES | ||
IMPORTED_LOCATION "${Nettle_LIBRARY}" | ||
INTERFACE_COMPILE_OPTIONS "${PC_Nettle_CFLAGS_OTHER}" | ||
INTERFACE_INCLUDE_DIRECTORIES "${Nettle_INCLUDE_DIR}" | ||
) | ||
endif() | ||
|
||
mark_as_advanced( | ||
Nettle_INCLUDE_DIR | ||
Nettle_LIBRARY | ||
) | ||
|
||
# compatibility variables | ||
set(Nettle_VERSION_STRING ${Nettle_VERSION}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
/* | ||
* OpenSCAD (www.openscad.org) | ||
* Copyright (C) 2009-2011 Clifford Wolf <[email protected]> and | ||
* Marius Kintel <[email protected]> | ||
* | ||
* This program 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. | ||
* | ||
* As a special exception, you have permission to link this program | ||
* with the CGAL library and distribute executables, as long as you | ||
* follow the requirements of the GNU GPL in regard to all of the | ||
* software in the executable aside from CGAL. | ||
* | ||
* This program 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 this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
* | ||
*/ | ||
|
||
#include <Python.h> | ||
#include "src/python/pyopenscad.h" | ||
#include "src/core/primitives.h" | ||
|
||
PyObject *python_cube(PyObject *self, PyObject *args, PyObject *kwargs) | ||
{ | ||
DECLARE_INSTANCE | ||
auto node = std::make_shared<CubeNode>(instance); | ||
|
||
char *kwlist[] = {"size", "center", NULL}; | ||
PyObject *size = NULL; | ||
|
||
PyObject *center = NULL; | ||
|
||
|
||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OO", kwlist, | ||
&size, | ||
¢er)){ | ||
PyErr_SetString(PyExc_TypeError, "Error during parsing cube(size)"); | ||
return NULL; | ||
} | ||
|
||
if (size != NULL) { | ||
if (python_vectorval(size, 3, 3, &(node->x), &(node->y), &(node->z))) { | ||
PyErr_SetString(PyExc_TypeError, "Invalid Cube dimensions"); | ||
return NULL; | ||
} | ||
} | ||
if(node->x <= 0 || node->y <= 0 || node ->z <= 0) { | ||
PyErr_SetString(PyExc_TypeError, "Cube Dimensions must be positive"); | ||
return NULL; | ||
} | ||
node->center = false; | ||
if (center == Py_False || center == NULL ) ; | ||
else if (center == Py_True){ | ||
for(int i=0;i<3;i++) node->center=true; | ||
} else { | ||
PyErr_SetString(PyExc_TypeError, "Unknown Value for center parameter"); | ||
return NULL; | ||
} | ||
return PyOpenSCADObjectFromNode(&PyOpenSCADType, node); | ||
} | ||
|
||
PyObject *python_show_core(PyObject *obj) | ||
{ | ||
std::shared_ptr<AbstractNode> child = PyOpenSCADObjectToNode(obj); | ||
if (child == NULL) { | ||
PyErr_SetString(PyExc_TypeError, "Invalid type for Object in output"); | ||
return NULL; | ||
} | ||
PyObject *key, *value; | ||
Py_ssize_t pos = 0; | ||
python_result_node = child; | ||
return Py_None; | ||
} | ||
|
||
PyObject *python_show(PyObject *self, PyObject *args, PyObject *kwargs) | ||
{ | ||
PyObject *obj = NULL; | ||
char *kwlist[] = {"obj", NULL}; | ||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O", kwlist, | ||
&obj | ||
)) { | ||
PyErr_SetString(PyExc_TypeError, "Error during parsing output(object)"); | ||
return NULL; | ||
} | ||
return python_show_core(obj); | ||
} | ||
|
||
PyMethodDef PyOpenSCADFunctions[] = { | ||
{"cube", (PyCFunction) python_cube, METH_VARARGS | METH_KEYWORDS, "Create Cube."}, | ||
{"show", (PyCFunction) python_show, METH_VARARGS | METH_KEYWORDS, "Show the result."}, | ||
{NULL, NULL, 0, NULL} | ||
}; | ||
|
Oops, something went wrong.