Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
openstructure
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container registry
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
schwede
openstructure
Commits
1f7514ff
Commit
1f7514ff
authored
12 years ago
by
Andreas Schenk
Browse files
Options
Downloads
Patches
Plain Diff
fixed ui file compilation
cleaned up file list parsing for module and pymod macros
parent
b7ddebf7
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
cmake_support/OST.cmake
+121
-118
121 additions, 118 deletions
cmake_support/OST.cmake
with
121 additions
and
118 deletions
cmake_support/OST.cmake
+
121
−
118
View file @
1f7514ff
#-------------------------------------------------------------------------------
# Author: Marco Biasini, Juergen Haas
# Author
s
: Marco Biasini, Juergen Haas
, Andreas Schenk
#
# This file contains a bunch of useful macros to facilitate the build-system
# configuration for the modules.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# map macro
#
# this function emulates a map/dict data type
#-------------------------------------------------------------------------------
function
(
map COMMAND MAPNAME
)
set
(
_KEYS
${
MAPNAME
}
_MAP_KEYS
)
set
(
_VALUES
${
MAPNAME
}
_MAP_VALUES
)
if
(
${
COMMAND
}
STREQUAL SET
)
list
(
REMOVE_AT ARGN 0
)
list
(
FIND
${
_KEYS
}
${
ARGV2
}
_MAP_INDEX
)
if
(
_MAP_INDEX EQUAL -1
)
list
(
APPEND
${
_KEYS
}
${
ARGV2
}
)
set
(
${
_KEYS
}
${${
_KEYS
}}
PARENT_SCOPE
)
set
(
${
_VALUES
}
_
${
ARGV2
}
${
ARGN
}
PARENT_SCOPE
)
else
()
set
(
${
_VALUES
}
_
${
ARGV2
}
${
ARGN
}
PARENT_SCOPE
)
endif
()
elseif
(
${
COMMAND
}
STREQUAL GET
)
list
(
FIND
${
_KEYS
}
${
ARGV2
}
_MAP_INDEX
)
if
(
_MAP_INDEX EQUAL -1
)
MESSAGE
(
FATAL_ERROR
"Unknown key: "
${
ARGV2
}
)
endif
()
set
(
${
ARGV3
}
${${
_VALUES
}
_
${
ARGV2
}}
PARENT_SCOPE
)
elseif
(
${
COMMAND
}
STREQUAL KEYS
)
set
(
${
ARGV2
}
${${
_KEYS
}}
PARENT_SCOPE
)
elseif
(
${
COMMAND
}
STREQUAL CREATE
)
set
(
${
_KEYS
}
""
PARENT_SCOPE
)
elseif
(
${
COMMAND
}
STREQUAL LENGTH
)
list
(
LENGTH
${
_KEYS
}
_L
)
set
(
${
ARGV2
}
${
_L
}
PARENT_SCOPE
)
else
()
MESSAGE
(
FATAL_ERROR
"Unknown map command:"
${
COMMAND
}
)
endif
()
endfunction
()
#-------------------------------------------------------------------------------
# check_architecture
#
...
...
@@ -115,6 +153,35 @@ macro(stage_headers HEADERS HEADER_INSTALL_DIR TARGET SUB)
add_dependencies
(
${
TARGET
}
${
_TARGET_NAME
}
)
endmacro
()
#-------------------------------------------------------------------------------
# parse_file_list
#
# this macro splits a list of files with IN_DIR statements and fills them into a map
# where the key is the directory name
#-------------------------------------------------------------------------------
macro
(
parse_file_list FILELIST FILEMAP
)
set
(
_EXPECT_IN_DIR FALSE
)
map
(
CREATE
${
FILEMAP
}
)
set
(
_CURRENT_LIST
)
foreach
(
_ITEM
${
FILELIST
}
)
if
(
_ITEM STREQUAL
"IN_DIR"
)
set
(
_EXPECT_IN_DIR TRUE
)
else
()
if
(
_EXPECT_IN_DIR
)
set
(
_EXPECT_IN_DIR FALSE
)
map
(
SET
${
FILEMAP
}
${
_ITEM
}
${
_CURRENT_LIST
}
)
set
(
_CURRENT_LIST
)
else
()
list
(
APPEND _CURRENT_LIST
"
${
_ITEM
}
"
)
endif
()
endif
()
endforeach
()
if
(
_CURRENT_LIST
)
map
(
SET
${
FILEMAP
}
"."
${
_CURRENT_LIST
}
)
endif
()
endmacro
()
#-------------------------------------------------------------------------------
# Synopsis:
# module(NAME name SOURCES source1 source2 HEADERS header1 header2
...
...
@@ -142,36 +209,18 @@ macro(module)
if
(
_ARG_HEADER_OUTPUT_DIR
)
set
(
_HEADER_OUTPUT_DIR
${
_ARG_HEADER_OUTPUT_DIR
}
)
else
()
if
(
_ARG_PREFIX
)
set
(
_HEADER_OUTPUT_DIR
"
${
_ARG_PREFIX
}
/
${
_ARG_NAME
}
"
)
else
()
set
(
_HEADER_OUTPUT_DIR
"
${
_ARG_NAME
}
"
)
endif
()
endif
()
if
(
_ARG_PREFIX
)
set
(
_LIB_NAME
${
_ARG_PREFIX
}
_
${
_ARG_NAME
}
)
else
()
set
(
_LIB_NAME
${
_ARG_NAME
}
)
set
(
_HEADER_OUTPUT_DIR
"
${
_ARG_PREFIX
}
/
${
_ARG_NAME
}
"
)
endif
()
set
(
_LIB_NAME
${
_ARG_PREFIX
}
_
${
_ARG_NAME
}
)
string
(
TOUPPER
${
_LIB_NAME
}
_UPPER_LIB_NAME
)
#-----------------------------------------------------------------------------
# create library
#-----------------------------------------------------------------------------
file
(
MAKE_DIRECTORY
${
LIB_STAGE_PATH
}
)
file
(
MAKE_DIRECTORY
${
EXECUTABLE_OUTPUT_PATH
}
)
file
(
MAKE_DIRECTORY
${
LIBEXEC_STAGE_PATH
}
)
file
(
MAKE_DIRECTORY
"
${
CMAKE_BINARY_DIR
}
/tests"
)
if
(
NOT TARGET make_stage_lib_dir
)
add_custom_target
(
make_stage_lib_dir COMMAND
${
CMAKE_COMMAND
}
-E make_directory
${
LIB_STAGE_PATH
}
)
endif
()
if
(
NOT TARGET make_executable_output_dir
)
add_custom_target
(
make_executable_output_dir COMMAND
${
CMAKE_COMMAND
}
-E make_directory
${
EXECUTABLE_OUTPUT_PATH
}
)
endif
()
if
(
NOT TARGET make_libexec_dir
)
add_custom_target
(
make_libexec_dir COMMAND
${
CMAKE_COMMAND
}
-E make_directory
${
LIBEXEC_STAGE_PATH
}
)
endif
()
if
(
NOT TARGET make_tests_dir
)
add_custom_target
(
make_tests_dir COMMAND
${
CMAKE_COMMAND
}
-E make_directory
"
${
CMAKE_BINARY_DIR
}
/tests"
)
if
(
NOT TARGET create_stage
)
add_custom_target
(
create_stage COMMAND
${
CMAKE_COMMAND
}
-E make_directory
${
LIB_STAGE_PATH
}
COMMAND
${
CMAKE_COMMAND
}
-E make_directory
${
EXECUTABLE_OUTPUT_PATH
}
COMMAND
${
CMAKE_COMMAND
}
-E make_directory
${
LIBEXEC_STAGE_PATH
}
COMMAND
${
CMAKE_COMMAND
}
-E make_directory
"
${
CMAKE_BINARY_DIR
}
/tests"
)
endif
()
if
(
WIN32
)
set
(
_ABS_FILE_PATTERN
"^[A-Z]:/"
)
...
...
@@ -199,10 +248,7 @@ macro(module)
EchoString
${
_ARG_NAME
}
MODULE_DEPS
"
${
_ARG_DEPENDS_ON
}
"
)
get_target_property
(
_DEFS
${
_LIB_NAME
}
COMPILE_DEFINITIONS
)
add_dependencies
(
${
_LIB_NAME
}
make_stage_lib_dir
)
add_dependencies
(
${
_LIB_NAME
}
make_executable_output_dir
)
add_dependencies
(
${
_LIB_NAME
}
make_libexec_dir
)
add_dependencies
(
${
_LIB_NAME
}
make_tests_dir
)
add_dependencies
(
${
_LIB_NAME
}
create_stage
)
set_target_properties
(
${
_LIB_NAME
}
PROPERTIES
COMPILE_DEFINITIONS OST_MODULE_
${
_UPPER_LIB_NAME
}
)
set_target_properties
(
${
_LIB_NAME
}
PROPERTIES
...
...
@@ -245,45 +291,20 @@ macro(module)
#-----------------------------------------------------------------------------
# stage headers
#-----------------------------------------------------------------------------
if
(
_ARG_HEADERS
)
set
(
_HEADERS
)
set
(
_EXPECT_IN_DIR FALSE
)
foreach
(
_HEADER
${
_ARG_HEADERS
}
)
if
(
_HEADER STREQUAL
"IN_DIR"
)
set
(
_EXPECT_IN_DIR TRUE
)
else
()
if
(
_EXPECT_IN_DIR
)
set
(
_EXPECT_IN_DIR FALSE
)
set
(
_DIR
${
_HEADER
}
)
set
(
_ABS_HEADER_NAMES
)
set
(
_HDR_SOURCE_DIR
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
${
_DIR
}
"
)
foreach
(
_HDR
${
_HEADERS
}
)
list
(
APPEND _ABS_HEADER_NAMES
"
${
_HDR_SOURCE_DIR
}
/
${
_HDR
}
"
)
endforeach
()
install
(
FILES
${
_ABS_HEADER_NAMES
}
DESTINATION
"include/
${
_HEADER_OUTPUT_DIR
}
/
${
_DIR
}
"
)
set
(
_HDR_STAGE_DIR
"
${
_HEADER_OUTPUT_DIR
}
/
${
_DIR
}
"
)
stage_headers
(
"
${
_HEADERS
}
"
"
${
_HDR_STAGE_DIR
}
"
"
${
_LIB_NAME
}
"
"
${
_DIR
}
"
)
set
(
_HEADERS
)
else
()
list
(
APPEND _HEADERS
"
${
_HEADER
}
"
)
endif
()
endif
()
endforeach
()
list
(
LENGTH _HEADERS _HEADER_LIST_LENGTH
)
if
(
_HEADER_LIST_LENGTH GREATER 0
)
set
(
_ABS_HEADER_NAMES
)
set
(
_HDR_SOURCE_DIR
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
if
(
_ARG_HEADERS
)
parse_file_list
(
"
${
_ARG_HEADERS
}
"
_HEADER_MAP
)
map
(
KEYS _HEADER_MAP _HEADER_MAP_KEYS
)
foreach
(
_DIR
${
_HEADER_MAP_KEYS
}
)
map
(
GET _HEADER_MAP
${
_DIR
}
_HEADERS
)
set
(
_ABS_HEADER_NAMES
)
set
(
_HDR_SOURCE_DIR
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
${
_DIR
}
"
)
foreach
(
_HDR
${
_HEADERS
}
)
list
(
APPEND _ABS_HEADER_NAMES
"
${
_HDR_SOURCE_DIR
}
/
${
_HDR
}
"
)
endforeach
()
install
(
FILES
${
_ABS_HEADER_NAMES
}
DESTINATION
"include/
${
_HEADER_OUTPUT_DIR
}
"
)
set
(
_HDR_STAGE_DIR
"
${
_HEADER_OUTPUT_DIR
}
"
)
stage_headers
(
"
${
_HEADERS
}
"
"
${
_HDR_STAGE_DIR
}
"
"
${
_LIB_NAME
}
"
""
)
endif
()
endforeach
()
install
(
FILES
${
_ABS_HEADER_NAMES
}
DESTINATION
"include/
${
_HEADER_OUTPUT_DIR
}
/
${
_DIR
}
"
)
set
(
_HDR_STAGE_DIR
"
${
_HEADER_OUTPUT_DIR
}
/
${
_DIR
}
"
)
stage_headers
(
"
${
_HEADERS
}
"
"
${
_HDR_STAGE_DIR
}
"
"
${
_LIB_NAME
}
"
"
${
_DIR
}
"
)
endforeach
()
endif
()
endmacro
()
...
...
@@ -422,13 +443,14 @@ endmacro()
#-------------------------------------------------------------------------------
# Synopsis:
# ui_to_python(
module out_files
[input_file1 ...])
# ui_to_python(
libname stagedir
[input_file1 ...])
# Description:
# Calls pyuic on every input file. The resulting python files are stored in
# the variable with name out_files.
#-------------------------------------------------------------------------------
macro
(
ui_to_python
module out_files
)
macro
(
ui_to_python
LIBNAME STAGEDIR
)
set
(
_input_files
${
ARGN
}
)
add_custom_target
(
"
${
LIBNAME
}
_ui"
)
find_program
(
_PYUIC_EXECUTABLE
NAMES pyuic4-
${
PYTHON_VERSION
}
pyuic4 pyuic
PATHS ENV PATH
...
...
@@ -436,17 +458,19 @@ macro(ui_to_python module out_files)
if
(
NOT _PYUIC_EXECUTABLE
)
message
(
FATAL_ERROR
"Could not find pyuic command in "
${
QT_BINARY_DIR
}
" for python version "
${
PYTHON_VERSION
}
)
endif
(
NOT _PYUIC_EXECUTABLE
)
set
(
out_files
)
foreach
(
input_file
${
_input_files
}
)
get_filename_component
(
_out_file
${
input_file
}
NAME_WE
)
get_filename_component
(
_in_file
${
input_file
}
ABSOLUTE
)
set
(
_out_file
${
CMAKE_CURRENT_SOURCE_DIR
}
/
${
_out_file
}
_ui.py
)
add_custom_command
(
TARGET
${
module
}
COMMAND
${
_PYUIC_EXECUTABLE
}
-o
${
_out_file
}
${
_in_file
}
set
(
_out_file
${
_out_file
}
_ui.py
)
set
(
_abs_out_file
${
STAGEDIR
}
/
${
_out_file
}
)
add_custom_command
(
TARGET
${
LIBNAME
}
_ui
COMMAND
${
_PYUIC_EXECUTABLE
}
-o
${
_abs_out_file
}
${
_in_file
}
VERBATIM DEPENDS
${
input_file
}
)
list
(
APPEND
${
out_files
}
${
_out_file
}
)
list
(
APPEND
${
out_files
}
${
_
abs_
out_file
}
)
endforeach
()
compile_py_files
(
_
${
LIBNAME
}
${
STAGEDIR
}
${
out_files
}
)
endmacro
()
#-------------------------------------------------------------------------------
...
...
@@ -502,6 +526,7 @@ macro(pymod)
set
(
_LIB_NAME
${
_ARG_PREFIX
}
_
${
_ARG_NAME
}
)
set
(
PYMOD_STAGE_DIR
"
${
LIB_STAGE_PATH
}
/
${
PYMOD_DIR
}
"
)
file
(
MAKE_DIRECTORY
${
PYMOD_STAGE_DIR
}
)
include_directories
(
${
PYTHON_INCLUDE_PATH
}
)
#-----------------------------------------------------------------------------
# compile and link C++ wrappers
#-----------------------------------------------------------------------------
...
...
@@ -556,56 +581,34 @@ macro(pymod)
else
()
add_custom_target
(
"_
${
_LIB_NAME
}
"
ALL
)
endif
()
set
(
_PY_FILES
)
#-----------------------------------------------------------------------------
# build ui files
#-----------------------------------------------------------------------------
if
(
_ARG_UI
)
add_custom_target
(
"
${
_LIB_NAME
}
_ui"
)
ui_to_python
(
"
${
_LIB_NAME
}
_ui"
_PY_FILES
${
_ARG_UI
}
)
ui_to_python
(
${
_LIB_NAME
}
${
PYMOD_STAGE_DIR
}
${
_ARG_UI
}
)
endif
()
if
(
_ARG_PY OR _PY_FILES
)
set
(
_EXPECT_IN_DIR FALSE
)
foreach
(
_PY_FILE
${
_ARG_PY
}
)
if
(
_PY_FILE STREQUAL
"IN_DIR"
)
set
(
_EXPECT_IN_DIR TRUE
)
else
()
if
(
_EXPECT_IN_DIR
)
set
(
_EXPECT_IN_DIR FALSE
)
set
(
_DIR
${
_PY_FILE
}
)
set
(
_ABS_PY_FILES
)
set
(
_PY_SOURCE_DIR
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
${
_DIR
}
"
)
foreach
(
_PY
${
_PY_FILES
}
)
list
(
APPEND _ABS_PY_FILES
"
${
_PY_SOURCE_DIR
}
/
${
_PY
}
"
)
endforeach
()
install
(
FILES
${
_ABS_PY_FILES
}
DESTINATION
"
${
LIB_DIR
}
/
${
PYMOD_DIR
}
/
${
_DIR
}
"
)
string
(
REPLACE
"/"
"_"
_DIR_NO_SLASH
"
${
_DIR
}
"
)
add_custom_target
(
"
${
_ARG_NAME
}
_
${
_DIR_NO_SLASH
}
_pymod"
ALL
)
copy_if_different
(
"./"
"
${
PYMOD_STAGE_DIR
}
/
${
_DIR
}
"
"
${
_ABS_PY_FILES
}
"
"TARGETS"
"
${
_ARG_NAME
}
_
${
_DIR_NO_SLASH
}
_pymod"
)
compile_py_files
(
_
${
_LIB_NAME
}
${
PYMOD_STAGE_DIR
}
/
${
_DIR
}
${
_ABS_PY_FILES
}
)
set
(
_PY_FILES
)
else
()
list
(
APPEND _PY_FILES
"
${
_PY_FILE
}
"
)
endif
()
endif
()
endforeach
()
if
(
_PY_FILES
)
add_custom_target
(
"
${
_LIB_NAME
}
_pymod"
ALL
)
if
(
_ARG_UI
)
add_dependencies
(
"
${
_LIB_NAME
}
_pymod"
"
${
_LIB_NAME
}
_ui"
}
)
endif
()
#-----------------------------------------------------------------------------
# compile python files
#-----------------------------------------------------------------------------
if
(
_ARG_PY
)
parse_file_list
(
"
${
_ARG_PY
}
"
_PYFILE_MAP
)
map
(
KEYS _PYFILE_MAP _PYFILE_MAP_KEYS
)
foreach
(
_DIR
${
_HEADER_MAP_KEYS
}
)
map
(
GET _PYFILE_MAP
${
_DIR
}
_PY_FILES
)
set
(
_ABS_PY_FILES
)
set
(
_PY_SOURCE_DIR
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
set
(
_PY_SOURCE_DIR
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
${
_DIR
}
"
)
foreach
(
_PY
${
_PY_FILES
}
)
list
(
APPEND _ABS_PY_FILES
"
${
_PY_SOURCE_DIR
}
/
${
_PY
}
"
)
endforeach
()
copy_if_different
(
"./"
"
${
PYMOD_STAGE_DIR
}
"
"
${
_ABS_PY_FILES
}
"
"TARGETS"
"
${
_LIB_NAME
}
_pymod"
)
add_dependencies
(
"_
${
_LIB_NAME
}
"
"
${
_LIB_NAME
}
_pymod"
)
compile_py_files
(
_
${
_LIB_NAME
}
${
PYMOD_STAGE_DIR
}
${
_PY_FILES
}
)
include_directories
(
${
PYTHON_INCLUDE_PATH
}
)
install
(
FILES
${
_PY_FILES
}
DESTINATION
"
${
LIB_DIR
}
/
${
PYMOD_DIR
}
"
)
endif
()
install
(
FILES
${
_ABS_PY_FILES
}
DESTINATION
"
${
LIB_DIR
}
/
${
PYMOD_DIR
}
/
${
_DIR
}
"
)
string
(
REPLACE
"/"
"_"
_DIR_NO_SLASH
"
${
_DIR
}
"
)
string
(
REPLACE
"._"
""
_DIR_NO_SLASH
"
${
_DIR_NO_SLASH
}
"
)
add_custom_target
(
"
${
_ARG_NAME
}
_
${
_DIR_NO_SLASH
}
_pymod"
ALL
)
copy_if_different
(
"./"
"
${
PYMOD_STAGE_DIR
}
/
${
_DIR
}
"
"
${
_ABS_PY_FILES
}
"
"TARGETS"
"
${
_ARG_NAME
}
_
${
_DIR_NO_SLASH
}
_pymod"
)
compile_py_files
(
_
${
_LIB_NAME
}
${
PYMOD_STAGE_DIR
}
/
${
_DIR
}
${
_ABS_PY_FILES
}
)
endforeach
()
endif
()
get_target_property
(
_MOD_DEPS
"
${
_PARENT_NAME
}
"
MODULE_DEPS
)
if
(
_MOD_DEPS
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment