blob: a2bdd5bb8008770df449f91cc0869dfaf2c23cd3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#
# Use the Nepomuk resource class generator to generate convinient Resource subclasses
# from ontologies.
#
# Usage:
# NEPOMUK_ADD_ONTOLOGY_CLASSES(<sources-var>
# [FAST]
# [ONTOLOGIES] <onto-file1> [<onto-file2> ...]
# [CLASSES <class1> [<class2> ...]]
# [VISIBILITY <visibility-name>]
# )
#
# If FAST is specified the rcgen parameter --fast will be used which results in resource classes
# not based on Nepomuk::Resource but on a custom class which does not perform any checks and simply
# writes the data to Nepomuk (hence the name fast).
#
# The optional CLASSES parameter allows to specify the classes to be generated (RDF URIs) in
# case one does not want all classes in the ontologies to be generated.
#
# The optional VISIBILITY parameter can only be used in non-fast mode and allows to set the gcc visibility
# to make the generated classes usable in a publically exported API. The <visibility-name> is used to create
# the name of the export macro and the export include file. Thus, when using "VISIBILITY foobar" include
# file "foobar_export.h" needs to define FOOBAR_EXPORT.
#
# Copyright (c) 2009 Sebastian Trueg <trueg@kde.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
macro(NEPOMUK_ADD_ONTOLOGY_CLASSES _sources)
# extract arguments
set(_current_arg_type "onto")
foreach(_arg ${ARGN})
if(${_arg} STREQUAL "ONTOLOGIES")
set(_current_arg_type "onto")
elseif(${_arg} STREQUAL "VISIBILITY")
set(_current_arg_type "visib")
elseif(${_arg} STREQUAL "CLASSES")
set(_current_arg_type "class")
elseif(${_arg} STREQUAL "FAST")
set(_fastmode "--fast")
else(${_arg} STREQUAL "ONTOLOGIES")
if(${_current_arg_type} STREQUAL "onto")
list(APPEND _ontologies ${_arg})
get_filename_component(_filename ${_arg} NAME)
list(APPEND _ontofilenames ${_filename})
elseif(${_current_arg_type} STREQUAL "class")
list(APPEND _classes "--class" "${_arg}")
else(${_current_arg_type} STREQUAL "onto")
set(_visibility "--visibility" "${_arg}")
endif(${_current_arg_type} STREQUAL "onto")
endif(${_arg} STREQUAL "ONTOLOGIES")
endforeach(_arg)
# find our helper program (first in the install dir, then everywhere)
if(NOT WINCE)
find_program(RCGEN nepomuk-rcgen PATHS ${KDE4_BIN_INSTALL_DIR} ${BIN_INSTALL_DIR} NO_DEFAULT_PATH)
find_program(RCGEN nepomuk-rcgen)
else(NOT WINCE)
find_program(RCGEN nepomuk-rcgen PATHS ${HOST_BINDIR} NO_DEFAULT_PATH)
endif(NOT WINCE)
if(NOT RCGEN)
message(SEND_ERROR "Failed to find the Nepomuk source generator" )
else(NOT RCGEN)
file(TO_NATIVE_PATH ${RCGEN} RCGEN)
# we generate the files in the current binary dir
set(_targetdir ${CMAKE_CURRENT_BINARY_DIR})
# generate the list of source and header files
execute_process(
COMMAND ${RCGEN} ${_fastmode} --listheaders --prefix ${_targetdir}/ ${_classes} ${_visibility} ${_ontologies}
OUTPUT_VARIABLE _out_headers
RESULT_VARIABLE rcgen_result
)
if(NOT ${rcgen_result} EQUAL 0)
message(SEND_ERROR "Running ${RCGEN} to generate list of headers failed with error code ${rcgen_result}")
endif(NOT ${rcgen_result} EQUAL 0)
execute_process(
COMMAND ${RCGEN} ${_fastmode} --listsources --prefix ${_targetdir}/ ${_classes} ${_visibility} ${_ontologies}
OUTPUT_VARIABLE _out_sources
RESULT_VARIABLE rcgen_result
)
if(NOT ${rcgen_result} EQUAL 0)
message(SEND_ERROR "Running ${RCGEN} to generate list of sources failed with error code ${rcgen_result}")
endif(NOT ${rcgen_result} EQUAL 0)
add_custom_command(OUTPUT ${_out_headers} ${_out_sources}
COMMAND ${RCGEN} ${_fastmode} --writeall --target ${_targetdir}/ ${_classes} ${_visibility} ${_ontologies}
DEPENDS ${_ontologies}
COMMENT "Generating ontology source files from ${_ontofilenames}"
)
# make sure the includes are found
include_directories(${_targetdir})
# finally append the source files to the source list
list(APPEND ${_sources} ${_out_sources})
endif(NOT RCGEN)
# reset variable names used
unset(_current_arg_type)
unset(_arg)
unset(_ontologies)
unset(_ontofilenames)
unset(_classes)
unset(_visibility)
unset(_fastmode)
unset(_targetdir)
unset(_out_headers)
unset(_out_sources)
unset(rcgen_result)
endmacro(NEPOMUK_ADD_ONTOLOGY_CLASSES)
|