cmake_minimum_required(VERSION 3.16)

project(wfoutdoor)

set(SOURCES
    "ArxMain.cpp"
    "CalcDirtWellDataDlg.cpp"
    "CalcDirtWellDlg.cpp"
    "CalcRainRoofDlg.cpp"
    "CalcSheetDlg.cpp"
    "CColorButton.cpp"
    "CesspoolCalcDlg.cpp"
    "CessPoolExplainDlg.cpp"
    "CollectElevation.cpp"
    "DataContainer.cpp"
    "DeleteLableDlg.cpp"
    "Dim.cpp"
    "DrawPipeCanalDlg.cpp"
    "DrawSectionSymbol.cpp"
    "EditOutdoorPipeDlg.cpp"
    "EditPipeDnGradientDlg.cpp"
    "EditWellLayingDepthDlg.cpp"
    "ElevationCalc.cpp"
    "ElevationCalcCheckDlg.cpp"
    "ElevationCalcDlg.cpp"
    "ElevationCheck.cpp"
    "ElevationCheckDlg.cpp"
    "EvadeUpdating.cpp"
    "GullyDlg.cpp"
    "HorizontalSection.cpp"
    "HorizontalSectionDlg.cpp"
    "ImpDrawControllableSection.cpp"
    "ImpDrawGeneralSection.cpp"
    "InsHydrantDlg.cpp"
    "IntersectPointNumberDlg.cpp"
    "LayDepthSetDlg.cpp"
    "other.cpp"
    "outdoor.cpp"
    "OverfallWeirCalcDlg.cpp"
    "PerpeDistanceTable.cpp"
    "PipeDownDimEditDlg.cpp"
    "PipeInterCheckDlg.cpp"
    "PoolDlg.cpp"
    "PoolEditDlg.cpp"
    "PositiveElevationCalc.cpp"
    "RainCalc.cpp"
    "RainNewCityDlg.cpp"
    "RecurCycleDlg.cpp"
    "ReverseElevationCalc.cpp"
    "road.cpp"
    "RoofInfoCalcDlg.cpp"
    "RunoffQuotietyDlg.cpp"
    "SelectBlkDlg.cpp"
    "SetDataSourceDlg.cpp"
    "SiphonRainwater.cpp"
    "SiphonRainwaterCalcDlg.cpp"
    "StakeDlg.cpp"
    "StdAfx.cpp"
    "TBlockInsertEdJig.cpp"
    "TDbCableWatch.cpp"
    "TPipeCanalJig.cpp"
    "TRoadJig.cpp"
    "TSectionEdJig.cpp"
    "TVerticalSectionEdJig.cpp"
    "TVirtualPipeCanal.cpp"
    "TWellJig.cpp"
    "VerticalSectionFeedDlg.cpp"
    "VerticalSectionSettingDlg.cpp"
    "WaterBucketDlg.cpp"
    "WaterBucketParameterDlg.cpp"
    "WaterRationDlg.cpp"
    "WellCalcEarthworkDlg.cpp"
    "WellCalcModifyEleDlg.cpp"
    "WellCalcSettingDlg.cpp"
    "WellCoordSheetSettingDlg.cpp"
    "WellDimEditDlg.cpp"
    "WellDlg.cpp"
    "WellDnDlg.cpp"
    "WellEditDlg.cpp"
    "WellModifyDlg.cpp"
    "WellRepiarDlg.cpp"
    "WellSerial.cpp"
    "WellSerialDlg.cpp"
    "shs_outdoor.rc"
    # "wfoutdoor.def"
)
add_def_file_name(SOURCES "wfoutdoor")

add_library(wfoutdoor SHARED ${SOURCES})

target_set_name_and_suffix(wfoutdoor "wfoutdoor" ".arx")

target_link_options(wfoutdoor PRIVATE 
        "/NODEFAULTLIB:LIBCMT"      # 忽略 Release 版静态 CRT
    )

target_compile_definitions(wfoutdoor PRIVATE
    ACRXAPP
    S4FOX
    S4NT
    TAR_LANGUAGE=1
)

simple_link_cad_sdk(wfoutdoor)

target_link_directories(wfoutdoor PRIVATE
    $<$<CONFIG:DEBUG>:${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG}>
    $<$<CONFIG:Release>:${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE}>
)

# 此处的依赖在stdafx.h通过代码进行硬依赖，否则arx会无法加载。
# 原因是 wfkernal 直接导出了全局变量导致 wfkernal 的加载权限提高（数据符号绑定欲望高）
# 提前加载 wfkernal 而不去寻址 wfK 等arx
target_link_libraries(wfoutdoor PRIVATE
    ThirdParty::TG
    #shs_dbf
    #wfK
    #wfpipew
    #wfKernal
)

add_dependencies(wfoutdoor wfKernal)

target_precompile_headers(wfoutdoor PRIVATE StdAfx.h)

set_debug_post_build(wfoutdoor "wfoutdoor" ".arx")