b0e3d72fce1885968e3ddf309229daa6feaab943
[occt.git] / adm / cmake / BuildToolkit.cmake
1 # Get all used packages from toolkit
2 foreach (MODULE ${TOOLKIT_MODULES})
3   if (WIN32)
4     list (APPEND PRECOMPILED_DEFS "-D__${MODULE}_DLL")
5   endif()
6   list (APPEND COMPILER_DIRECTORIES "${OCCT_SOURCE_DIR}/src/${MODULE}")
7 endforeach()
8 string (REGEX REPLACE ";" " " PRECOMPILED_DEFS "${PRECOMPILED_DEFS}")
9
10 # Get from toolkits EXTERNLIB all used libs
11 OCCT_TOOLKIT_DEP (${PROJECT_NAME} ${PROJECT_NAME}_DEPS)
12 foreach (DEP ${${PROJECT_NAME}_DEPS})
13   IS_OCCT_TOOLKIT (${DEP} OCCT_MODULES FOUND_TOOLKIT)
14   if ("${FOUND_TOOLKIT}" STREQUAL "ON")
15     list ( APPEND USED_LIBS "${DEP}" )
16   endif()
17 endforeach()
18
19 # Get all source files from used packages
20 foreach (CDIR ${COMPILER_DIRECTORIES})
21   get_filename_component (CDirName ${CDIR} NAME)
22   set (CDIR_files)
23   set (HDIR_files)
24   file(STRINGS "${CDIR}/FILES" FLEX_Files REGEX ".+[.]lex")
25   file(STRINGS "${CDIR}/FILES" BISON_Files REGEX ".+[.]yacc")
26   file(STRINGS "${CDIR}/FILES" CFiles REGEX ".+[.]c")
27   file(STRINGS "${CDIR}/FILES" MFiles REGEX ".+[.]mm")
28   file(STRINGS "${CDIR}/FILES" HFiles REGEX ".+[.]h")
29   file(STRINGS "${CDIR}/FILES" LXXFiles REGEX ".+[.]lxx")
30   file(STRINGS "${CDIR}/FILES" GXXFiles REGEX ".+[.]gxx")
31
32   # Generate Flex and Bison files
33   if (${BUILD_BISON_FLEX_FILES})
34     list (LENGTH FLEX_Files FLength)
35     list (LENGTH BISON_Files BLength)
36     list (SORT FLEX_Files)
37     list (SORT BISON_Files)
38     if (${FLength} EQUAL ${BLength} AND NOT ${FLength} EQUAL 0)
39       math (EXPR FLength "${FLength} - 1")
40       foreach (FileIndex RANGE ${FLength})
41         list (GET FLEX_Files ${FileIndex} FLEX_File)
42         list (GET BISON_Files ${FileIndex} BISON_File)
43         get_filename_component (FLEX_Name ${FLEX_File} NAME_WE)
44         get_filename_component (BISON_Name ${BISON_File} NAME_WE)
45         string (COMPARE EQUAL ${FLEX_Name} ${BISON_Name} isEQUAL)
46         if (EXISTS "${FLEX_File}" AND EXISTS "${BISON_File}" AND ${isEQUAL})
47           BISON_TARGET (Parser_${BISON_Name} ${BISON_File} ${CDIR}/${BISON_Name}.tab.c)
48           FLEX_TARGET (Scanner_${FLEX_Name} ${FLEX_File} ${CDIR}/lex.${FLEX_Name}.c)
49           ADD_FLEX_BISON_DEPENDENCY (Scanner_${FLEX_Name} Parser_${BISON_Name})
50           list (APPEND CDIR_files ${BISON_Parser_${BISON_Name}_OUTPUTS} ${FLEX_Scanner_${FLEX_Name}_OUTPUTS})
51         endif()
52       endforeach()
53     endif()
54   endif()
55
56   list(APPEND HDIR_files ${HFiles} ${LXXFiles} ${GXXFiles})
57   list( APPEND CDIR_files ${CFiles})
58   if(APPLE)
59     list( APPEND CDIR_files ${MFiles})
60   endif()
61
62   foreach(HFile ${HDIR_files})
63     list( APPEND USED_INCFILES ${CDIR}/${HFile} )
64     SOURCE_GROUP ("Header Files\\${CDirName}" FILES ${CDIR}/${HFile})
65   endforeach(HFile)
66
67   foreach(CFile ${CDIR_files})
68     list( APPEND USED_SRCFILES ${CDIR}/${CFile} )
69     SOURCE_GROUP ("Source Files\\${CDirName}" FILES ${CDIR}/${CFile})
70   endforeach(CFile)
71 endforeach(CDIR)
72
73 list( FIND USED_TOOLKITS ${PROJECT_NAME} isFOUND)
74
75 OCCT_MAKE_BUILD_POSTFIX()
76 # Create project for toolkit
77 if ("${USED_TOOLKITS}" STREQUAL "" OR NOT ${isFOUND} EQUAL -1)
78   foreach (MODULE ${OCCT_MODULES})
79     list (FIND ${MODULE}_TOOLKITS ${PROJECT_NAME} isFOUND)
80     if (NOT ${isFOUND} EQUAL -1)
81       set (CURRENT_MODULE ${MODULE})
82     endif()
83   endforeach()
84   if (isEXE)
85     add_executable (${PROJECT_NAME} ${USED_SRCFILES} ${USED_INCFILES})
86     install (TARGETS ${PROJECT_NAME} DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}" )
87   else()
88     add_library (${PROJECT_NAME} ${USED_SRCFILES} ${USED_INCFILES})
89     install (TARGETS ${PROJECT_NAME}
90              RUNTIME DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}"
91              ARCHIVE DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}"
92              LIBRARY DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}")
93     if (MSVC)
94       install (FILES  ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}/${PROJECT_NAME}.pdb
95                CONFIGURATIONS Debug
96                DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
97     endif()
98   endif()
99
100   set_property (TARGET ${PROJECT_NAME} PROPERTY FOLDER "Modules/${CURRENT_MODULE}")
101   set_target_properties (${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${PRECOMPILED_DEFS}")
102   target_link_libraries (${PROJECT_NAME} ${USED_LIBS})
103 endif()