Compare commits
	
		
			51 Commits
		
	
	
		
			v1.2.2
			...
			python-ren
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b959f8282a | |||
| 22efe4f8ca | |||
| 391789b812 | |||
| 98483da759 | |||
| aafcb162b7 | |||
| 1fac7d7721 | |||
| b30aaa4c4e | |||
| fb6e3a29af | |||
| f03dd0ab19 | |||
| b6a2f29a2f | |||
| 921b55b962 | |||
| 4d3f0ccb94 | |||
| 7526597251 | |||
| 1278af202a | |||
| b63da7bf09 | |||
| 23ba7c0136 | |||
| 7721a40912 | |||
| 7297800a99 | |||
| 943007685c | |||
| 7d6faf8db7 | |||
| 9eed1ac33d | |||
| 246695610c | |||
| bd4d91807b | |||
| 2aa1fffa8e | |||
| 447d583103 | |||
| 394efb79cf | |||
| 2420b80c9e | |||
| 02f221b926 | |||
| dd2f21c5cd | |||
| b27676e0a4 | |||
| b610b1593a | |||
| 95f6b31e4b | |||
| a4d84cff43 | |||
| aa7f5b4745 | |||
| 71b500e030 | |||
| d69d4f3f7e | |||
| a60fe6543e | |||
| dc32499ad7 | |||
| 322439145e | |||
| 231248e404 | |||
| 88d912f59d | |||
| f454ca7e71 | |||
| 045b9dce30 | |||
| 112a5ac74c | |||
| 6b5101ecec | |||
| 583e5581c0 | |||
| 519d2296ad | |||
| 02720ec37b | |||
| cf2947d2d5 | |||
| c7ceef7d66 | |||
| ebce4a2669 | 
@@ -38,7 +38,7 @@ IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
 | 
			
		||||
	add_definitions(-DGETTEXT_PACKAGE=\"gds-render\" -DLOCALEDATADIR=\"${CMAKE_CURRENT_BINARY_DIR}/translations/output\")
 | 
			
		||||
	message("${BoldMagenta}${CMAKE_CURRENT_BINARY_DIR}/translations/output used as data dir${ColorReset}")
 | 
			
		||||
else(CMAKE_BUILD_TYPE STREQUAL "Debug")
 | 
			
		||||
	message("Global locale directory used. Make sure files in /usr/share/locale are available")
 | 
			
		||||
	message("${BoldCyan}Global locale directory used. Make sure files in /usr/share/locale are available${ColorReset}")
 | 
			
		||||
	add_definitions(-DGETTEXT_PACKAGE=\"gds-render\" -DLOCALEDATADIR=\"/usr/share\")
 | 
			
		||||
ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -146,6 +146,7 @@ int command_line_convert_gds(const char *gds_name,
 | 
			
		||||
			      double scale)
 | 
			
		||||
{
 | 
			
		||||
	int ret = -1;
 | 
			
		||||
	int render_ret;
 | 
			
		||||
	GList *libs = NULL;
 | 
			
		||||
	int res;
 | 
			
		||||
	GList *renderer_list = NULL;
 | 
			
		||||
@@ -163,7 +164,14 @@ int command_line_convert_gds(const char *gds_name,
 | 
			
		||||
 | 
			
		||||
	/* Load layer_settings */
 | 
			
		||||
	layer_sett = layer_settings_new();
 | 
			
		||||
	layer_settings_load_from_csv(layer_sett, layer_file);
 | 
			
		||||
	if (!layer_sett)
 | 
			
		||||
		goto return_value;
 | 
			
		||||
 | 
			
		||||
	ret = layer_settings_load_from_csv(layer_sett, layer_file);
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		fprintf(stderr, _("Loading layer mapping file failed.\n"));
 | 
			
		||||
		goto ret_destroy_layer_mapping;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Create renderers */
 | 
			
		||||
	if (create_renderers(renderers, output_file_names, tex_layers, tex_standalone,
 | 
			
		||||
@@ -221,7 +229,9 @@ int command_line_convert_gds(const char *gds_name,
 | 
			
		||||
	/* Execute all rendererer instances */
 | 
			
		||||
	for (list_iter = renderer_list; list_iter; list_iter = list_iter->next) {
 | 
			
		||||
		current_renderer = GDS_RENDER_OUTPUT_RENDERER(list_iter->data);
 | 
			
		||||
		gds_output_renderer_render_output(current_renderer, toplevel_cell, scale);
 | 
			
		||||
		render_ret = gds_output_renderer_render_output(current_renderer, toplevel_cell, scale);
 | 
			
		||||
		if (render_ret)
 | 
			
		||||
			fprintf(stderr, "Rendering failed with error code: %d\n", render_ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
ret_destroy_library_list:
 | 
			
		||||
@@ -231,6 +241,7 @@ ret_clear_renderers:
 | 
			
		||||
		g_object_unref(list_iter->data);
 | 
			
		||||
ret_destroy_layer_mapping:
 | 
			
		||||
	g_object_unref(layer_sett);
 | 
			
		||||
return_value:
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,5 +22,6 @@
 | 
			
		||||
 * @ref EXTERNAL_LIBRARY_RENDER_FUNCTION	| int EXTERNAL_LIBRARY_RENDER_FUNCTION(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale)		| Render cell to output file
 | 
			
		||||
 * @ref EXTERNAL_LIBRARY_INIT_FUNCTION		| int EXTERNAL_LIBRARY_INIT_FUNCTION(const char *option_string, const char *version_string)							| Init function. Executed before rendering. This is given the command line parameters specified for the external renderer and the version string of the currently running gds-render program.
 | 
			
		||||
 * @ref EXTERNAL_LIBRARY_FORK_REQUEST		| int EXTERNAL_LIBRARY_FORK_REQUEST;														| The pure presence of this integer results in the execution inside a subprocess of hte whole shared object's code
 | 
			
		||||
 * @ref EXTERNAL_LIBRARY_FINALIZE_FUNCTION | int EXTERNAL_LIBRARY_FINALIZE_FUNCTION(void) | Called after rendering
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
/**
 | 
			
		||||
 * @file cairo-renderer.h
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,11 @@
 | 
			
		||||
 */
 | 
			
		||||
#define EXPORT_FUNC __attribute__((visibility("default")))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief This define is used to export a variable symbol from a shared object
 | 
			
		||||
 */
 | 
			
		||||
#define EXPORT_VAR EXPORT_FUNC
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Function name expected to be found in external library for rendering.
 | 
			
		||||
 *
 | 
			
		||||
@@ -56,6 +61,15 @@
 | 
			
		||||
 */
 | 
			
		||||
#define EXTERNAL_LIBRARY_INIT_FUNCTION exported_init
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Function name expected to be found in external library for finalizing.
 | 
			
		||||
 *
 | 
			
		||||
 * @code
 | 
			
		||||
 * int EXTERNAL_LIBRARY_FINALIZE_FUNCTION(void);
 | 
			
		||||
 * @endcode
 | 
			
		||||
 */
 | 
			
		||||
#define EXTERNAL_LIBRARY_FINALIZE_FUNCTION exported_finalize
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Global integer specified by an external renderer to signal, that the init and render functions shall be executed in a subprocess
 | 
			
		||||
 *
 | 
			
		||||
@@ -67,10 +81,29 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Define for declaring the exported functions.
 | 
			
		||||
 *
 | 
			
		||||
 * This not only helps with the declaration but also makes the symbols visible, so they can be called form outside the library
 | 
			
		||||
 * This not only helps with the declaration but also makes the symbols visible, so they can be called from outside the library
 | 
			
		||||
 */
 | 
			
		||||
#define EXPORTED_FUNC_DECL(FUNC) EXPORT_FUNC FUNC
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Define for declaring exported variables
 | 
			
		||||
 *
 | 
			
		||||
 * This not only helps with the declaration but also makes the symbols visible, so they can be accessed from outside the library
 | 
			
		||||
 */
 | 
			
		||||
#define EXPORTED_VAR_DECL(VAR) EXPORT_VAR VAR
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Define for declaring variables based on a define expansion
 | 
			
		||||
 * @note If you want to declare an exported variable use @ref EXPORTED_VAR_DECL
 | 
			
		||||
 */
 | 
			
		||||
#define VAR_DECL(VAR) VAR
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Define for declaring functions based on a define expansion
 | 
			
		||||
 * @note If you want to declare an exported function use @ref EXPORTED_FUNC_DECL
 | 
			
		||||
 */
 | 
			
		||||
#define FUNC_DECL(FUNC) FUNC
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
#endif /* __EXTERNAL_RENDERER_INTERFACES_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.c
									
									
									
									
									
								
							@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
/**
 | 
			
		||||
 * @file cairo-renderer.c
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -67,6 +67,7 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
 | 
			
		||||
{
 | 
			
		||||
	int (*so_render_func)(struct gds_cell *, GList *, const char *, double) = NULL;
 | 
			
		||||
	int (*so_init_func)(const char *, const char *) = NULL;
 | 
			
		||||
	int (*so_finalize_func)(void) = NULL;
 | 
			
		||||
	void *so_handle = NULL;
 | 
			
		||||
	char *error_msg;
 | 
			
		||||
	int forking_req;
 | 
			
		||||
@@ -94,7 +95,7 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
 | 
			
		||||
	so_render_func = (int (*)(struct gds_cell *, GList *, const char *, double))
 | 
			
		||||
				dlsym(so_handle, xstr(EXTERNAL_LIBRARY_RENDER_FUNCTION));
 | 
			
		||||
	error_msg = dlerror();
 | 
			
		||||
	if (error_msg != NULL) {
 | 
			
		||||
	if (error_msg) {
 | 
			
		||||
		fprintf(stderr, _("Rendering function not found in library:\n%s\n"), error_msg);
 | 
			
		||||
		goto ret_close_so_handle;
 | 
			
		||||
	}
 | 
			
		||||
@@ -102,8 +103,16 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
 | 
			
		||||
	/* Load the init function */
 | 
			
		||||
	so_init_func = (int (*)(const char *, const char *))dlsym(so_handle, xstr(EXTERNAL_LIBRARY_INIT_FUNCTION));
 | 
			
		||||
	error_msg = dlerror();
 | 
			
		||||
	if (error_msg != NULL) {
 | 
			
		||||
		fprintf(stderr, _("Init function not found in library:\n%s\n"), error_msg);
 | 
			
		||||
	if (error_msg) {
 | 
			
		||||
		fprintf(stderr, _("Rendering function not found in library:\n%s\n"), error_msg);
 | 
			
		||||
		goto ret_close_so_handle;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Load the finalize function */
 | 
			
		||||
	so_finalize_func = (int (*)(void))dlsym(so_handle, xstr(EXTERNAL_LIBRARY_FINALIZE_FUNCTION));
 | 
			
		||||
	error_msg = dlerror();
 | 
			
		||||
	if (error_msg) {
 | 
			
		||||
		fprintf(stderr, "Finalize function not found in library:\n%s\n", error_msg);
 | 
			
		||||
		goto ret_close_so_handle;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -128,6 +137,9 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
 | 
			
		||||
	if (!ret)
 | 
			
		||||
		ret = so_render_func(toplevel_cell, layer_info_list, output_file, scale);
 | 
			
		||||
 | 
			
		||||
	/* Finalize the external renderer */
 | 
			
		||||
	ret |= so_finalize_func();
 | 
			
		||||
 | 
			
		||||
	/* If we are in a separate process, terminate here */
 | 
			
		||||
	if (forking_req)
 | 
			
		||||
		exit(ret);
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +1,4 @@
 | 
			
		||||
add_subdirectory(plugin-example)
 | 
			
		||||
add_custom_target(plugins DEPENDS pluginexample)
 | 
			
		||||
add_subdirectory(python-renderer)
 | 
			
		||||
 | 
			
		||||
add_custom_target(plugins DEPENDS pluginexample pythonrenderer)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,11 @@
 | 
			
		||||
project(pluginexample)
 | 
			
		||||
cmake_minimum_required(VERSION 2.8)
 | 
			
		||||
find_package(PkgConfig REQUIRED)
 | 
			
		||||
pkg_search_module(PYTHON REQUIRED python3)
 | 
			
		||||
 | 
			
		||||
aux_source_directory(src SOURCES)
 | 
			
		||||
 | 
			
		||||
include_directories(${PYTHON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include)
 | 
			
		||||
link_libraries(${PYTHON_LDFLAGS} version)
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
 | 
			
		||||
link_libraries(version)
 | 
			
		||||
 | 
			
		||||
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
 | 
			
		||||
add_dependencies(${PROJECT_NAME} version)
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -25,7 +25,6 @@
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <glib.h>
 | 
			
		||||
#include <gds-render/gds-utils/gds-types.h>
 | 
			
		||||
@@ -46,4 +45,10 @@ int EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_FINALIZE_FUNCTION)(void)
 | 
			
		||||
{
 | 
			
		||||
	printf("Finalize function called.\n");
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								plugins/python-renderer/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								plugins/python-renderer/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
project(pythonrenderer)
 | 
			
		||||
cmake_minimum_required(VERSION 2.8.8)
 | 
			
		||||
find_package(PythonLibs)
 | 
			
		||||
 | 
			
		||||
if(NOT WIN32)
 | 
			
		||||
  string(ASCII 27 Esc)
 | 
			
		||||
  set(ColorReset "${Esc}[m")
 | 
			
		||||
  set(ColorBold  "${Esc}[1m")
 | 
			
		||||
  set(Red         "${Esc}[31m")
 | 
			
		||||
  set(Green       "${Esc}[32m")
 | 
			
		||||
  set(Yellow      "${Esc}[33m")
 | 
			
		||||
  set(Blue        "${Esc}[34m")
 | 
			
		||||
  set(Magenta     "${Esc}[35m")
 | 
			
		||||
  set(Cyan        "${Esc}[36m")
 | 
			
		||||
  set(White       "${Esc}[37m")
 | 
			
		||||
  set(BoldRed     "${Esc}[1;31m")
 | 
			
		||||
  set(BoldGreen   "${Esc}[1;32m")
 | 
			
		||||
  set(BoldYellow  "${Esc}[1;33m")
 | 
			
		||||
  set(BoldBlue    "${Esc}[1;34m")
 | 
			
		||||
  set(BoldMagenta "${Esc}[1;35m")
 | 
			
		||||
  set(BoldCyan    "${Esc}[1;36m")
 | 
			
		||||
  set(BoldWhite   "${Esc}[1;37m")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
aux_source_directory(src SOURCES)
 | 
			
		||||
 | 
			
		||||
include_directories(${PYTHON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include)
 | 
			
		||||
link_libraries(${PYTHON_LIBRARIES} version)
 | 
			
		||||
 | 
			
		||||
message("${BoldCyan}Python version found: ${PYTHONLIBS_VERSION_STRING}${ColorReset}")
 | 
			
		||||
 | 
			
		||||
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
 | 
			
		||||
add_dependencies(${PROJECT_NAME} version)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										43
									
								
								plugins/python-renderer/include/python-renderer/force-fork.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								plugins/python-renderer/include/python-renderer/force-fork.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
/*
 | 
			
		||||
 * GDSII-Converter Python Plugin
 | 
			
		||||
 * Copyright (C) 2019  Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of GDSII-Converter.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter 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 GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file force-fork.h
 | 
			
		||||
 * @brief Header file force fork variabel definition.
 | 
			
		||||
 *
 | 
			
		||||
 * This file makes the force fork variable accessible.
 | 
			
		||||
 * Actually this is kind of useless. However, here it is :)
 | 
			
		||||
 * @author Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __PYTHON_PLUGIN_FORCE_FORK_H__
 | 
			
		||||
#define __PYTHON_PLUGIN_FORCE_FORK_H__
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @addtogroup python-plugin
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
#include <gds-render/output-renderers/external-renderer-interfaces.h>
 | 
			
		||||
 | 
			
		||||
extern const int VAR_DECL(EXTERNAL_LIBRARY_FORK_REQUEST);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
#endif /* __PYTHON_PLUGIN_FORCE_FORK_H__ */
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
/*
 | 
			
		||||
 * GDSII-Converter Python Plugin
 | 
			
		||||
 * Copyright (C) 2019  Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of GDSII-Converter.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter 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 GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file gds-render-module.h
 | 
			
		||||
 * @brief Header file for the gds-render python module implementation
 | 
			
		||||
 * @author Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __GDS_RENDER_MODULE_H__
 | 
			
		||||
#define __GDS_RENDER_MODULE_H__
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @addtogroup python-renderer
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <Python.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief The gds_render python module name as string
 | 
			
		||||
 */
 | 
			
		||||
#define GDS_RENDER_MOD_NAME "gds_render"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Set up the gds_render python module
 | 
			
		||||
 * @return New module reference
 | 
			
		||||
 */
 | 
			
		||||
PyObject *init_gds_render_module();
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
#endif /* __GDS_RENDER_MODULE_H__ */
 | 
			
		||||
							
								
								
									
										50
									
								
								plugins/python-renderer/include/python-renderer/glist.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								plugins/python-renderer/include/python-renderer/glist.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
/*
 | 
			
		||||
 * GDSII-Converter Python Plugin
 | 
			
		||||
 * Copyright (C) 2020  Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of GDSII-Converter.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter 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 GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file python-renderer/glist.c
 | 
			
		||||
 * @author Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @defgroup python-plugin-glist GList wrapper for python
 | 
			
		||||
 * @ingroup python-plugin
 | 
			
		||||
 * This is a wrapping class for GLists
 | 
			
		||||
 * @addtogroup python-plugin-glist
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __GLIST_H__
 | 
			
		||||
#define __GLIST_H__
 | 
			
		||||
 | 
			
		||||
#ifndef PY_SSIZE_T_CLEAN
 | 
			
		||||
#define PY_SSIZE_T_CLEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <Python.h>
 | 
			
		||||
#include <glib.h>
 | 
			
		||||
 | 
			
		||||
extern PyTypeObject GListType;
 | 
			
		||||
 | 
			
		||||
typedef struct _GListObject GListObject;
 | 
			
		||||
 | 
			
		||||
void glist_set_head_ptr(GListObject *self, GList *head);
 | 
			
		||||
 | 
			
		||||
#endif /* __GLIST_H__ */
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										37
									
								
								plugins/python-renderer/src/force-fork.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								plugins/python-renderer/src/force-fork.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
/*
 | 
			
		||||
 * GDSII-Converter Python Plugin
 | 
			
		||||
 * Copyright (C) 2019  Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of GDSII-Converter.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter 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 GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file python-renderer/force-fork.c
 | 
			
		||||
 * @author Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <python-renderer/force-fork.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @addtogroup python-plugin
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* The precense of this variable tells the gds-render application to execute this plugin in a separate process
 | 
			
		||||
 * The variable's value is don't care
 | 
			
		||||
 */
 | 
			
		||||
const int EXPORTED_VAR_DECL(EXTERNAL_LIBRARY_FORK_REQUEST) = 1;
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										100
									
								
								plugins/python-renderer/src/gds-render-module.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								plugins/python-renderer/src/gds-render-module.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
			
		||||
/*
 | 
			
		||||
 * GDSII-Converter Python Plugin
 | 
			
		||||
 * Copyright (C) 2019  Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of GDSII-Converter.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter 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 GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file gds-render-module.c
 | 
			
		||||
 * @brief Gds-render python module implementation
 | 
			
		||||
 * @author Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <python-renderer/gds-render-module.h>
 | 
			
		||||
#include <gds-render/gds-utils/gds-types.h>
 | 
			
		||||
#include <python-renderer/glist.h>
 | 
			
		||||
 | 
			
		||||
static PyObject *test(PyObject *self, PyObject *args)
 | 
			
		||||
{
 | 
			
		||||
	long int i;
 | 
			
		||||
 | 
			
		||||
	if(!PyArg_ParseTuple(args, "l:get_number", &i))
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	i *= i;
 | 
			
		||||
 | 
			
		||||
	return PyLong_FromLong(i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static PyMethodDef gds_render_methods[] = {
 | 
			
		||||
	{"get_number", test, METH_VARARGS, "Return the number of arguments received by the process."},
 | 
			
		||||
	{NULL, NULL, 0, NULL}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static PyModuleDef gds_render_module_def = {
 | 
			
		||||
	PyModuleDef_HEAD_INIT,
 | 
			
		||||
	.m_name = GDS_RENDER_MOD_NAME,
 | 
			
		||||
	.m_doc = "GDS Render Base App Module",
 | 
			
		||||
	.m_size = -1,
 | 
			
		||||
	.m_methods = gds_render_methods,
 | 
			
		||||
	NULL, NULL, NULL, NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int gds_render_module_check_types_ready()
 | 
			
		||||
{
 | 
			
		||||
	if (!PyType_Ready(&GListType))
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int gds_render_module_add_types(PyObject *module)
 | 
			
		||||
{
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
	Py_INCREF(&GListType);
 | 
			
		||||
	err = PyModule_AddObject(module, "GdsPoint", (PyObject *)&GListType);
 | 
			
		||||
	if (err < 0) {
 | 
			
		||||
		goto decref_glist;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
decref_glist:
 | 
			
		||||
	Py_DECREF(&GListType);
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PyObject *init_gds_render_module(void)
 | 
			
		||||
{
 | 
			
		||||
	int err;
 | 
			
		||||
	PyObject *gds_render_module;
 | 
			
		||||
 | 
			
		||||
	if (gds_render_module_check_types_ready())
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	gds_render_module = PyModule_Create(&gds_render_module_def);
 | 
			
		||||
 | 
			
		||||
	err = gds_render_module_add_types(gds_render_module);
 | 
			
		||||
	if (err) {
 | 
			
		||||
		Py_DECREF(gds_render_module);
 | 
			
		||||
		gds_render_module = NULL;
 | 
			
		||||
		goto return_module;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
return_module:
 | 
			
		||||
	return gds_render_module;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										72
									
								
								plugins/python-renderer/src/glist.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								plugins/python-renderer/src/glist.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
/*
 | 
			
		||||
 * GDSII-Converter Python Plugin
 | 
			
		||||
 * Copyright (C) 2020  Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of GDSII-Converter.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter 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 GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file python-renderer/glist.c
 | 
			
		||||
 * @author Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @defgroup python-plugin-glist GList wrapper for python
 | 
			
		||||
 * @ingroup python-plugin
 | 
			
		||||
 * This is a wrapping class for GLists
 | 
			
		||||
 * This wrpper acts as a read only access to the lists
 | 
			
		||||
 *
 | 
			
		||||
 * @addtogroup python-plugin-glist
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <python-renderer/glist.h>
 | 
			
		||||
 | 
			
		||||
struct _GListObject {
 | 
			
		||||
	PyObject_HEAD
 | 
			
		||||
	GList *head;
 | 
			
		||||
	size_t len;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static PyObject *glist_to_list(GListObject *self, PyObject *Py_UNUSED(ignored))
 | 
			
		||||
{
 | 
			
		||||
	return Py_BuildValue("");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static PyMethodDef glist_methods[] = {
 | 
			
		||||
	{"tolist", (PyCFunction)glist_to_list, METH_NOARGS, "Convert GList to editable list"}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void glist_set_head_ptr(GListObject *self, GList *head)
 | 
			
		||||
{
 | 
			
		||||
	if (!self || !head)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	self->head = head;
 | 
			
		||||
	self->len = g_list_length(self->head);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PyTypeObject GListType = {
 | 
			
		||||
	PyVarObject_HEAD_INIT(NULL, 0)
 | 
			
		||||
	.tp_name = "gds_render.GList",
 | 
			
		||||
	.tp_doc = "Read only GList",
 | 
			
		||||
	.tp_basicsize = sizeof(GListObject),
 | 
			
		||||
	.tp_itemsize = 0,
 | 
			
		||||
	.tp_flags = Py_TPFLAGS_DEFAULT,
 | 
			
		||||
	.tp_new = PyType_GenericNew,
 | 
			
		||||
	.tp_methods = glist_methods
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										173
									
								
								plugins/python-renderer/src/plugin-main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								plugins/python-renderer/src/plugin-main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,173 @@
 | 
			
		||||
/*
 | 
			
		||||
 * GDSII-Converter Python Plugin
 | 
			
		||||
 * Copyright (C) 2019  Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of GDSII-Converter.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * GDSII-Converter 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 GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file python-renderer/plugin-main.c
 | 
			
		||||
 * @author Mario Hüttel <mario.huettel@gmx.net>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @defgroup python-plugin Python Plugin for External Renderer
 | 
			
		||||
 * @ingroup plugins
 | 
			
		||||
 * This is a plugin for calling an external python script as renderer
 | 
			
		||||
 * @addtogroup python-plugin
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <libgen.h>
 | 
			
		||||
#include <glib.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <Python.h>
 | 
			
		||||
 | 
			
		||||
#include <gds-render/gds-utils/gds-types.h>
 | 
			
		||||
#include <gds-render/output-renderers/external-renderer-interfaces.h>
 | 
			
		||||
 | 
			
		||||
#include <python-renderer/gds-render-module.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Global variable for loaded module. This is not very nice.
 | 
			
		||||
 * @warning This has to be changed, if this api wants to be re-entrant.
 | 
			
		||||
 */
 | 
			
		||||
static PyObject *p_module = NULL;
 | 
			
		||||
 | 
			
		||||
int EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_RENDER_FUNCTION)(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale)
 | 
			
		||||
{
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	PyObject *p_render_func;
 | 
			
		||||
	PyObject *p_return_value;
 | 
			
		||||
 | 
			
		||||
	if (!toplevel)
 | 
			
		||||
		return -1000;
 | 
			
		||||
	if (!p_module)
 | 
			
		||||
		return -2000;
 | 
			
		||||
 | 
			
		||||
	printf("Rendering %s\n", toplevel->name);
 | 
			
		||||
 | 
			
		||||
	p_render_func = PyObject_GetAttrString(p_module, "test_func");
 | 
			
		||||
	if (!p_render_func && !PyCallable_Check(p_render_func)) {
 | 
			
		||||
		if (PyErr_Occurred())
 | 
			
		||||
			PyErr_Print();
 | 
			
		||||
		else
 | 
			
		||||
			fprintf(stderr, "Function not found in python module\n");
 | 
			
		||||
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto return_value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	p_return_value = PyObject_CallObject(p_render_func, NULL);
 | 
			
		||||
	if (p_return_value) {
 | 
			
		||||
		printf("Result of call: %ld\n", PyLong_AsLong(p_return_value));
 | 
			
		||||
		Py_DECREF(p_return_value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Py_XDECREF(p_render_func);
 | 
			
		||||
 | 
			
		||||
return_value:
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const char *version)
 | 
			
		||||
{
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	PyObject *p_name;
 | 
			
		||||
	PyObject *p_sys_path;
 | 
			
		||||
	PyObject *p_mod_dir_string;
 | 
			
		||||
	PyObject *gds_render_module;
 | 
			
		||||
	char file_path[PATH_MAX];
 | 
			
		||||
	char *file_path_for_dir;
 | 
			
		||||
	char *file_path_for_base;
 | 
			
		||||
	char *dir_name;
 | 
			
		||||
	char *base_name;
 | 
			
		||||
 | 
			
		||||
	if (!params || !version)
 | 
			
		||||
		return -1000;
 | 
			
		||||
 | 
			
		||||
	printf("Init with params: %s\ngds-render version: %s\n", params, version);
 | 
			
		||||
 | 
			
		||||
	ret = PyImport_AppendInittab("gds_render", &init_gds_render_module);
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		fprintf(stderr, "Registration of gds_render python module failed\n");
 | 
			
		||||
		goto return_value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Py_Initialize();
 | 
			
		||||
 | 
			
		||||
	if (!realpath(params, file_path)) {
 | 
			
		||||
		ret = -2;
 | 
			
		||||
		fprintf(stderr, "Invalid file name.\n");
 | 
			
		||||
		goto return_value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	file_path_for_dir = strdup(file_path);
 | 
			
		||||
	if (!file_path_for_dir) {
 | 
			
		||||
		ret = -3;
 | 
			
		||||
		goto return_value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	file_path_for_base = strdup(file_path);
 | 
			
		||||
	if (!file_path_for_base) {
 | 
			
		||||
		ret = -3;
 | 
			
		||||
		free (file_path_for_dir);
 | 
			
		||||
		goto return_value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dir_name = dirname(file_path_for_dir);
 | 
			
		||||
	base_name = basename(file_path_for_base);
 | 
			
		||||
 | 
			
		||||
	printf("Dir name : %s\n BAse name: %s\n", dir_name, base_name);
 | 
			
		||||
 | 
			
		||||
	p_sys_path = PySys_GetObject("path");
 | 
			
		||||
	p_mod_dir_string = PyUnicode_FromString(dir_name);
 | 
			
		||||
	PyList_Append(p_sys_path, p_mod_dir_string);
 | 
			
		||||
	Py_DECREF(p_mod_dir_string);
 | 
			
		||||
 | 
			
		||||
	p_name = PyUnicode_DecodeFSDefault(strtok(base_name, "."));
 | 
			
		||||
	p_module = PyImport_Import(p_name);
 | 
			
		||||
	Py_DECREF(p_name);
 | 
			
		||||
 | 
			
		||||
	if (!p_module) {
 | 
			
		||||
		PyErr_Print();
 | 
			
		||||
		fprintf(stderr, "Failed to load %s\n", params);
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto return_value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	free(file_path_for_dir);
 | 
			
		||||
	free(file_path_for_base);
 | 
			
		||||
 | 
			
		||||
return_value:
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_FINALIZE_FUNCTION)(void)
 | 
			
		||||
{
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	printf("Finalizing\n");
 | 
			
		||||
 | 
			
		||||
	if (p_module)
 | 
			
		||||
		Py_DECREF(p_module);
 | 
			
		||||
 | 
			
		||||
	ret = Py_FinalizeEx();
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with GDSII-Converter.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user