#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.



###
## global definitions
###
set_property(GLOBAL PROPERTY USE_FOLDERS ON)



###
## run subprojects
###
add_subdirectory(api)
add_subdirectory(core)
add_subdirectory(platform)
add_subdirectory(unittest)
add_subdirectory(filters/ooxml)



###
## group main objects
###
set(GroupSrcRoot
    DocFormats.c)



###
## group main headers
###
set(GroupHeaderRoot
    headers/DFCommon.h
    headers/DFCore.h
    headers/DFPlatform.h
    headers/DFTypes.h)


###
## group subproject objects
###
set(GroupObjRoot
    $<TARGET_OBJECTS:api>
    $<TARGET_OBJECTS:core>
    $<TARGET_OBJECTS:unittest>
    $<TARGET_OBJECTS:ooxml>
    $<TARGET_OBJECTS:platform>)



###
# library (release artifact)
###
add_library(DocFormats
    ${GroupSrcRoot}
    ${GroupHeaderRoot}
    ${GroupObjRoot})

source_group(src     FILES ${GroupSrcRoot})
source_group(headers FILES ${GroupHeaderRoot})
set_property(TARGET DocFormats PROPERTY FOLDER DocFormats)
