view generator/CMakeLists.txt @ 265:6cd923119ab1

Another attempt for supporting MacOS. Now qtjambi_masterinclude.h is generated in the cmake script and contains absolute paths. See, http://www.dsource.org/forums/viewtopic.php?t=4745&sid=2657de5e8bc30456762ad8a4990afeed
author SokoL_SD
date Mon, 07 Sep 2009 15:23:31 +0000
parents da7c867ef2ef
children 5134552d97f6
line wrap: on
line source

PROJECT(generator CXX C)
cmake_minimum_required(VERSION 2.6)
FIND_PACKAGE(Qt4 REQUIRED)

## Hack for msvc: force Release settings
STRING(TOUPPER "${CMAKE_BUILD_TYPE}" build_type_upper)
set(CMAKE_CXX_FLAGS_${build_type_upper} ${CMAKE_CXX_FLAGS_RELEASE}) 
get_property(dir_prop DIRECTORY 
	    PROPERTY COMPILE_DEFINITIONS_RELEASE)
set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS_${build_type_upper} ${dir_prop})

## Sources
set(srcs
    classlistgenerator.cpp
    cppgenerator.cpp
    cppheadergenerator.cpp
    cppimplgenerator.cpp
    docparser.cpp
    generatorsetd.cpp
    dgenerator.cpp
    jumptable.cpp
    metainfogenerator.cpp
    metajavabuilder.cpp
    qdocgenerator.cpp
    uiconverter.cpp
    containergenerator.cpp
    
    generator.cpp
    main.cpp
    reporthandler.cpp
    typeparser.cpp
    typesystem.cpp
    asttoxml.cpp
    fileout.cpp
    generatorset.cpp
    metajava.cpp
    customtypes.cpp
    abstractmetabuilder.cpp
    abstractmetalang.cpp
    prigenerator.cpp
    
    # rxx
    parser/ast.cpp
    parser/lexer.cpp
    parser/list.cpp
    parser/parser.cpp
    parser/smallobject.cpp
    parser/control.cpp
    parser/visitor.cpp
    parser/default_visitor.cpp
    parser/dumptree.cpp
    parser/tokens.cpp
    parser/binder.cpp
    parser/codemodel.cpp
    parser/type_compiler.cpp
    parser/name_compiler.cpp
    parser/declarator_compiler.cpp
    parser/class_compiler.cpp
    parser/codemodel_finder.cpp
    parser/compiler_utils.cpp
    
    ## rpp
    parser/rpp/preprocessor.cpp
)
## Moc headers
set(moc_hdrs
    #classlistgenerator.h
    cppgenerator.h
    cppheadergenerator.h
    cppimplgenerator.h
    #docparser.h
    generatorsetd.h
    dgenerator.h
    jumptable.h
    #metainfogenerator.h
    #metajavabuilder.h
    #qdocgenerator.h
    #uiconverter.h
    containergenerator.h
    generator.h
    #main.h
    #reporthandler.h
    #typeparser.h
    #typesystem.h
    #asttoxml.h
    fileout.h
    generatorset.h
    #metajava.h
    #customtypes.h
    #abstractmetabuilder.h
    #abstractmetalang.h
    prigenerator.h
    
    ## rxx
    #parser/ast.h
    #parser/lexer.h
    #parser/list.h
    #parser/parser.h
    #parser/rxx_allocator.h
    #parser/rpp-allocator.h
    #parser/smallobject.h
    #parser/tokens.h
    #parser/symbol.h
    #parser/control.h
    #parser/visitor.h
    #parser/default_visitor.h
    #parser/dumptree.h
    #parser/binder.h
    #parser/codemodel.h
    #parser/codemodel_pointer.h
    #parser/codemodel_fwd.h
    #parser/type_compiler.h
    #parser/name_compiler.h
    #parser/declarator_compiler.h
    #parser/class_compiler.h
    #parser/codemodel_finder.h
    #parser/compiler_utils.h
    
    # rpp
    #parser/rpp/pp-cctype.h
    #parser/rpp/pp-engine-bits.h
    #parser/rpp/pp-engine.h
    #parser/rpp/pp-environment.h
    #parser/rpp/pp-fwd.h
    #parser/rpp/pp-internal.h
    #parser/rpp/pp-iterator.h
    #parser/rpp/pp-macro-expander.h
    #parser/rpp/pp-macro.h
    #parser/rpp/pp-scanner.h
    #parser/rpp/pp-string.h
    #parser/rpp/pp-symbol.h
    #parser/rpp/pp.h
    #parser/rpp/preprocessor.h
    
)

## Resources.
set(res_files
    generator.qrc
)

#win32-msvc2005:{
#        QMAKE_CXXFLAGS += -wd4996
#        QMAKE_CFLAGS += -wd4996
#}

#if(MSVC)
#    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500 /Zc:wchar_t-")
#endif(MSVC)

#win32-msvc.net {
#        QMAKE_CXXFLAGS += /Zm500
#        QMAKE_CXXFLAGS -= -Zm200
#        QMAKE_CFLAGS -= -Zm200
#}

## Includes path.
set(inc_paths
    ${CMAKE_CURRENT_SOURCE_DIR}/../common 
    ${CMAKE_CURRENT_SOURCE_DIR}/parser
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/parser/rpp   
    #${CMAKE_CURRENT_SOURCE_DIR}/parser/include  
)

add_definitions(-DRXX_ALLOCATOR_INIT_0)

## Build project
find_package (Qt4 REQUIRED)
set (QT_USE_QTMAIN true)
set (QT_USE_QTGUI false)
set (QT_USE_QTXML true)

include(${QT_USE_FILE} ${CMAKE_CURRENT_SOURCE_DIR}) 

set(inc_paths
    ${inc_paths}
    ${QT_INCLUDES} 
)
set(lib_paths
    ${lib_paths}
    ${QT_LIBRARY_DIR} 
)
set(libs
    ${QT_LIBRARIES}
)

qt4_wrap_cpp(moc_srcs ${moc_hdrs})
qt4_add_resources(res_wrapped_files ${res_files})

set (all_srcs 
    ${srcs} ${moc_srcs} 
    ${res_wrapped_files}) 
include_directories(${inc_paths})
add_executable(generator ${all_srcs} )
target_link_libraries(generator ${libs})

## TODO: Precompilated header works well, but I don't know a license of PCHSupport_26.cmake which  
## was downloaded from http://www.vtk.org/Bug/view.php?id=1260. 
#OPTION(USEPCH "Build the project with precompiled-headers" ON)
#include(../cmake/PCHSupport_26.cmake)
#	
#IF(NOT USEPCH)
#    MESSAGE(STATUS "NOT using precompiled-header")
#ELSE(NOT USEPCH)
#    MESSAGE(STATUS "Using precompiled-header")
#    add_precompiled_header(generator ${CMAKE_CURRENT_SOURCE_DIR}/generator_pch.h)
#ENDIF(NOT USEPCH)

set(dgen_build_conf ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt)
set(jambi_inc ${CMAKE_BINARY_DIR}/CMakeFiles/qtjambi_masterinclude.h)
if(	NOT "${packages_in_build_txt}" STREQUAL "${packages}" 
	OR NOT EXISTS ${dgen_build_conf}
	OR NOT EXISTS ${jambi_inc})
    file(REMOVE ${dgen_build_conf})
    file(REMOVE ${jambi_inc})
    file(APPEND ${dgen_build_conf} "<typesystem>\n")
    foreach(package_normal ${packages})
	string(TOLOWER ${package_normal} package) 
	string(TOUPPER ${package_normal} package_upper) 
	file(APPEND ${dgen_build_conf} "	<load-typesystem name=\"typesystem_${package}.xml\" generate=\"yes\" />\n")
	message(STATUS "QT_${package_upper}_INCLUDE_DIR ${QT_${package_upper}_INCLUDE_DIR}")
	file(APPEND ${jambi_inc} "#include <${QT_QT${package_upper}_INCLUDE_DIR}/Qt${package_normal}>\n")
    endforeach(package_normal ${packages})
    file(APPEND ${dgen_build_conf} "</typesystem>\n")
    set(packages_in_build_txt ${packages} CACHE INTERNAL "")
endif(	NOT "${packages_in_build_txt}" STREQUAL "${packages}" 
	OR NOT EXISTS ${dgen_build_conf}
	OR NOT EXISTS ${jambi_inc})

set(gen_sources)
foreach(package_normal ${packages})
    string(TOLOWER ${package_normal} package) 
    set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}.xml)
    find_file(d_inc_file_found typesystem_${package}-java.java PATHS ${CMAKE_SOURCE_DIR}/generator/) 
    if(d_inc_file_found)
	set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}-java.java)
    endif(d_inc_file_found)
endforeach(package_normal ${packages})
mark_as_advanced(d_inc_file_found)
set(d_inc_file_found 1)
	
if(CMAKE_HOST_WIN32)
    set(sep ";")
else(CMAKE_HOST_WIN32)
    set(sep ":")
endif(CMAKE_HOST_WIN32)
foreach(path ${QT_INCLUDES})
    set(inc_paths ${path}${sep})
endforeach(path ${QT_INCLUDES})
if(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
    set(out_dir ${CMAKE_SOURCE_DIR})
else(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
    set(out_dir ${CMAKE_BINARY_DIR}/build)
endif(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
set(dgen_impl ${out_dir}/cpp/qt_core/ArrayOps_shell.cpp)
add_custom_command(OUTPUT ${dgen_impl}
	COMMAND ${CMAKE_COMMAND} -E remove -f ${dgen_impl}
	COMMAND "generator"
	ARGS ${GEN_OPT} --include-paths=${inc_paths}
	    --output-directory=${out_dir}
	    --source-directory=${CMAKE_SOURCE_DIR}/generator 
	    ${CMAKE_BINARY_DIR}/CMakeFiles/qtjambi_masterinclude.h  
	    ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt
	COMMENT "Generating binding..."
	DEPENDS generator ${gen_sources} ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt
)       
add_custom_target(dgen ALL DEPENDS ${dgen_impl} COMMENT "")