From 470323233a59792d7dea8a21c8a42be1f59a1806 Mon Sep 17 00:00:00 2001 From: David Nadlinger Date: Wed, 9 Nov 2011 20:40:39 +0100 Subject: [PATCH] Merged build system patches by Jonathan Mercier. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In detail, this commit: - Changes the default version that is built to D2, use D_VERSION to override. - Reverts back to building static libs by default until we are certain shared libs work fine everywhere. - Fixes installation pathes so that CMAKE_INSTALL_PREFIX is respected; /etc as sysconf dir for /usr prefix is special-cased. - Fixes out-of-source builds again, and causes temporary files (idgen, …) not to be written to the source directory anymore. This is a slightly cleaned up version of the changes from https://github.com/ldc-developers/ldc/pull/12. --- CMakeLists.txt | 87 +++++++++++++++++++++++++++--------------- ldc.rebuild.conf.in | 4 +- runtime/CMakeLists.txt | 78 ++++++++++++++++++++++--------------- 3 files changed, 105 insertions(+), 64 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f5a91148..2cb8a292 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,15 +61,26 @@ execute_process( #################### # LDC #################### -set(D_VERSION "1" CACHE STRING "D language version") -set(PROGRAM_PREFIX "" CACHE STRING "prepended to ldc binary name") -set(PROGRAM_SUFFIX "" CACHE STRING "appended to ldc binary name") -set(LIB_SUFFIX "" CACHE STRING "Suffix to add add for lib directory e.g: 64 => lib64") -set(SYSCONF_INSTALL_DIR "/etc" CACHE STRING "Default path where configuration file go for install") -set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Set prefix for installation") -set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "Directory where lib will be installed") -set(CONF_INST_DIR "${CMAKE_INSTALL_PREFIX}/${SYSCONF_INSTALL_DIR}" CACHE PATH "Set ldc.conf directory for installation") -set(BUILD_SHARED_LIBS ON CACHE BOOL "Build dynamic Lib for druntime and phobos/tango") + +# Generally, we want to install everything into CMAKE_INSTALL_PREFIX, but when +# it is /usr, put the config files into /etc to meet common practice. +if (NOT DEFINED SYSCONF_INSTALL_DIR) + if(CMAKE_INSTALL_PREFIX STREQUAL "/usr") + set(SYSCONF_INSTALL_DIR "/etc") + else(CMAKE_INSTALL_PREFIX STREQUAL "/usr") + set(SYSCONF_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/etc") + endif(CMAKE_INSTALL_PREFIX STREQUAL "/usr") +endif (NOT DEFINED SYSCONF_INSTALL_DIR) + +set(D_VERSION 2 CACHE STRING "D language version") +set(PROGRAM_PREFIX "" CACHE STRING "prepended to ldc binary name") +set(PROGRAM_SUFFIX "" CACHE STRING "appended to ldc binary name") +set(LIB_SUFFIX "" CACHE STRING "take empty string or 64. Directory where lib will be installed: lib or lib64") +set(CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Directory where lib will be installed") +set(CONF_INST_DIR ${SYSCONF_INSTALL_DIR} CACHE PATH "Set ldc.conf directory for installation") +set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX} CACHE PATH "output dir for built libraries") +set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/d CACHE PATH "Directory where will be put header files") +set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build as shared library or as static library") option(USE_BOEHM_GC "use the Boehm garbage collector internally") option(GENERATE_OFFTI "generate complete ClassInfo.offTi arrays") option(USE_METADATA "use metadata and related custom optimization passes") @@ -78,20 +89,22 @@ if(D_VERSION EQUAL 1) set(DMDFE_PATH dmd) set(LDC_EXE ldc) set(LDMD_EXE ldmd) + set(RUNTIME runtime) add_definitions(-DDMDV1) elseif(D_VERSION EQUAL 2) set(DMDFE_PATH dmd2) set(LDC_EXE ldc2) set(LDMD_EXE ldmd2) + set(RUNTIME druntime) add_definitions(-DDMDV2) else(D_VERSION EQUAL 1) message(FATAL_ERROR "unsupported D version") endif(D_VERSION EQUAL 1) file(MAKE_DIRECTORY - ${PROJECT_SOURCE_DIR}/bin - ${PROJECT_SOURCE_DIR}/${DMDFE_PATH} - ${PROJECT_SOURCE_DIR}/gen + ${PROJECT_BINARY_DIR} + ${PROJECT_BINARY_DIR}/${DMDFE_PATH} + ${PROJECT_BINARY_DIR}/gen ) ########## idgen and impcnvgen @@ -106,7 +119,7 @@ add_executable(impcnvgen ${DMDFE_PATH}/impcnvgen.c) set_target_properties( idgen impcnvgen PROPERTIES LINKER_LANGUAGE CXX - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/${DMDFE_PATH} + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH} COMPILE_FLAGS ${LLVM_CXXFLAGS} ) get_target_property(IDGEN_LOC idgen LOCATION) @@ -114,30 +127,30 @@ get_target_property(IMPCNVGEN_LOC impcnvgen LOCATION) # add_custom_command( OUTPUT - ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/id.c - ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/id.h + ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.c + ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.h # 2.4 COMMAND ${IDGEN_LOC} #COMMAND idgen - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/${DMDFE_PATH} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH} DEPENDS idgen ) add_custom_command( - OUTPUT ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/impcnvtab.c + OUTPUT ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/impcnvtab.c # 2.4 COMMAND ${IMPCNVGEN_LOC} #COMMAND impcnvgen - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/${DMDFE_PATH} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH} DEPENDS impcnvgen ) set(LDC_GENERATED - ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/id.c - ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/id.h - ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/impcnvtab.c + ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.c + ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.h + ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/impcnvtab.c ) ########## idgen and impcnvgen done -include_directories(. ${DMDFE_PATH} ${DMDFE_PATH}/root ${PROJECT_SOURCE_DIR}/${DMDFE_PATH} ${PROJECT_SOURCE_DIR} ${LLVM_INCLUDEDIR}) +include_directories(. ${DMDFE_PATH} ${DMDFE_PATH}/root ${PROJECT_BINARY_DIR}/${DMDFE_PATH} ${PROJECT_SOURCE_DIR} ${LLVM_INCLUDEDIR}) set(EXTRA_LLVM_MODULES "" CACHE STRING "extra llvm components to link in (see llvm-config --components)") separate_arguments(EXTRA_LLVM_MODULES) @@ -243,8 +256,7 @@ if(USE_METADATA) endif(USE_METADATA) if(CMAKE_MINOR_VERSION LESS 6) - set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin CACHE PATH "output dir for built executables") - set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib CACHE PATH "output dir for built libraries") + set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "output dir for built executables") add_definitions(-DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET}\\") add_definitions(-DDEFAULT_ALT_TARGET_TRIPLE=\\"${DEFAULT_ALT_TARGET}\\") add_definitions(-DLDC_INSTALL_PREFIX=\\"${CMAKE_INSTALL_PREFIX}\\") @@ -264,7 +276,7 @@ set(LDC_EXE_NAME ${PROGRAM_PREFIX}${LDC_EXE}${PROGRAM_SUFFIX}) set_target_properties( ${LDC_EXE} PROPERTIES OUTPUT_NAME ${LDC_EXE_NAME} - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin COMPILE_FLAGS "${LLVM_CXXFLAGS} ${LIBCONFIG_CXXFLAGS} -Wno-deprecated -Wno-write-strings -fexceptions" ) @@ -272,6 +284,8 @@ set_target_properties( target_link_libraries(${LDC_EXE} "${LLVM_LDFLAGS} ${LLVM_LIBS}" ${LIBCONFIG_LDFLAGS} config++) if(WIN32) target_link_libraries(${LDC_EXE} imagehlp psapi) +elseif(UNIX) + target_link_libraries(${LDC_EXE} dl) endif(WIN32) if(USE_BOEHM_GC) @@ -281,11 +295,22 @@ endif(USE_BOEHM_GC) get_target_property(LDC_LOC ${LDC_EXE} LOCATION) # TODO: testrun -FILE(GLOB library "${PROJECT_SOURCE_DIR}/lib/*.a" "${PROJECT_SOURCE_DIR}/lib/*.so" "${PROJECT_SOURCE_DIR}/lib/*.dll") -install(TARGETS ${LDC_EXE} DESTINATION bin) -install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/${LDMD_EXE} DESTINATION bin) -install(FILES ${PROJECT_SOURCE_DIR}/bin/${LDC_EXE}_install.conf DESTINATION ${CONF_INST_DIR}/${LDC_EXE}conf) -install(FILES ${PROJECT_SOURCE_DIR}/bin/${LDC_EXE}.rebuild.conf DESTINATION ${CONF_INST_DIR}) -install(FILES ${library} DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(TARGETS ${LDC_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/${LDMD_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}_install.conf DESTINATION ${CONF_INST_DIR} RENAME ${LDC_EXE}.conf) +install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}_install.rebuild.conf DESTINATION ${CONF_INST_DIR} RENAME ${LDC_EXE}.rebuild.conf) +if(D_VERSION EQUAL 2) + install(DIRECTORY ${PROJECT_BINARY_DIR}/runtime/import/core DESTINATION ${INCLUDE_INSTALL_DIR}/) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/phobos DESTINATION ${INCLUDE_INSTALL_DIR}/ PATTERN ".git" EXCLUDE ) + install(DIRECTORY ${LIBRARY_OUTPUT_PATH} DESTINATION ${CMAKE_INSTALL_PREFIX} USE_SOURCE_PERMISSIONS) + install(FILES ${PROJECT_SOURCE_DIR}/${RUNTIME}/import/object.di DESTINATION ${INCLUDE_INSTALL_DIR}/ldc) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/${RUNTIME}/import/ldc DESTINATION ${INCLUDE_INSTALL_DIR}/) +else(D_VERSION EQUAL 2) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/${RUNTIME}/internal/ldc/ DESTINATION ${INCLUDE_INSTALL_DIR}/ldc/) +endif(D_VERSION EQUAL 2) +install(DIRECTORY ${PROJECT_SOURCE_DIR}/runtime/import/ldc DESTINATION ${INCLUDE_INSTALL_DIR}/) +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + install(DIRECTORY bash_completion.d DESTINATION ${CONF_INST_DIR}) +endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") add_subdirectory(runtime EXCLUDE_FROM_ALL) diff --git a/ldc.rebuild.conf.in b/ldc.rebuild.conf.in index 1905600c..6b5031b5 100644 --- a/ldc.rebuild.conf.in +++ b/ldc.rebuild.conf.in @@ -1,2 +1,2 @@ -[Environment] -DFLAGS=-I@RUNTIME_DIR@ -I@RUNTIME_DIR@/lib/common -L-L%@P%/../lib -d-version=Tango -defaultlib=@RUNTIME_AIO@ -debuglib=@RUNTIME_AIO@ +[Environment] +DFLAGS=-I@RUNTIME_DIR@ -I@RUNTIME_DIR@/lib/common -L-L@CMAKE_INSTALL_LIBDIR@ -d-version=Tango -defaultlib=@RUNTIME_AIO@ -debuglib=@RUNTIME_AIO@ diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index a57e2215..9f4e56c0 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -31,9 +31,9 @@ if(D_VERSION EQUAL 1) set(LDC_IMPORTS) macro(imports_file SRCARG) get_filename_component(DEST ${SRCARG} NAME) - set(SRC ${PROJECT_SOURCE_DIR}/${SRCARG}) + set(SRC ${PROJECT_PARENT_DIR}/${SRCARG}) set(DEST ${RUNTIME_DIR}/ldc/${DEST}) - + list(APPEND LDC_IMPORTS ${DEST}) add_custom_command( OUTPUT ${DEST} @@ -52,7 +52,7 @@ if(D_VERSION EQUAL 1) set(RUNTIME_DC ldc-runtime) set(RUNTIME_AIO tango) # set paths to source files, or fill lists directly - set(RUNTIME_DC_DIR ${PROJECT_SOURCE_DIR}/internal) + set(RUNTIME_DC_DIR ${RUNTIME_DIR}/internal) set(RUNTIME_GC_DIR ${RUNTIME_DIR}/lib/gc/basic) set(RUNTIME_INCLUDE ${RUNTIME_DC_DIR}) file(GLOB CORE_D ${RUNTIME_DIR}/lib/common/tango/core/*.d) @@ -76,6 +76,9 @@ elseif(D_VERSION EQUAL 2) file(GLOB_RECURSE GC_D ${RUNTIME_GC_DIR}/*.d) file(GLOB_RECURSE DCRT_D ${RUNTIME_DC_DIR}/*.d) file(GLOB_RECURSE LDC_D ${RUNTIME_DIR}/src/ldc/*.d) + list(REMOVE_ITEM CORE_D + ${RUNTIME_DIR}/src/core/bitop.d + ) list(REMOVE_ITEM DCRT_D ${RUNTIME_DC_DIR}/alloca.d ${RUNTIME_DC_DIR}/arraybyte.d @@ -102,7 +105,7 @@ elseif(D_VERSION EQUAL 2) file(GLOB_RECURSE CORE_D_SYS ${RUNTIME_DIR}/src/core/sys/osx/*.d) endif(UNIX) list(APPEND CORE_D ${CORE_D_SYNC} ${CORE_D_SYS} ${CORE_D_STDC} ) - set(GENERATE_DI ${CORE_D}) + list(APPEND GENERATE_DI ${CORE_D}) list(APPEND CORE_D ${LDC_D} ${RUNTIME_DIR}/src/object_.d) file(GLOB CORE_C ${RUNTIME_DIR}/src/core/stdc/*.c) @@ -153,15 +156,17 @@ if(NOT LDC_LOC) endif(D_VERSION EQUAL 1) endif(NOT LDC_EXE) - find_program(LDC_LOC ${LDC_EXE} ../bin DOC "path to ldc binary") + find_program(LDC_LOC ${LDC_EXE} ${PROJECT_BINARY_DIR}/../bin DOC "path to ldc binary") if(NOT LDC_LOC) message(SEND_ERROR "ldc not found") endif(NOT LDC_LOC) set(LDC_EXE_NAME ${LDC_EXE}) endif(NOT LDC_LOC) -configure_file(${PROJECT_PARENT_DIR}/${CONFIG_NAME}.conf.in ${PROJECT_SOURCE_DIR}/../bin/${LDC_EXE}.conf) -configure_file(${PROJECT_PARENT_DIR}/${LDC_EXE}.rebuild.conf.in ${PROJECT_SOURCE_DIR}/../bin/${LDC_EXE}.rebuild.conf) +configure_file(${PROJECT_PARENT_DIR}/${CONFIG_NAME}.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}.conf) +# Prepare the config files for installation in bin. +configure_file(${PROJECT_PARENT_DIR}/${LDC_EXE}_install.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}_install.conf) +configure_file(${PROJECT_PARENT_DIR}/${LDC_EXE}.rebuild.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}_install.rebuild.conf) # patch runtime source, uses LDC_EXE for ldc2 if(D_VERSION EQUAL 2) @@ -177,7 +182,7 @@ if(D_VERSION EQUAL 2) # rebuild cache to include sources added by patch add_custom_command( OUTPUT recache - COMMAND ${CMAKE_COMMAND} -H${PROJECT_PARENT_DIR} -B${PROJECT_SOURCE_DIR}/.. + COMMAND ${CMAKE_COMMAND} -H${PROJECT_PARENT_DIR} -B${PROJECT_BINARY_DIR}/.. ) add_custom_target(patch DEPENDS patch-runtime recache ${LDC_IMPORTS}) endif(NOT PATCH_EXE) @@ -196,8 +201,8 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH) else ("${path}" STREQUAL "") set(output ${path}/${name}) endif ("${path}" STREQUAL "") - set(OUTPUT_O ${PROJECT_SOURCE_DIR}/${output}.o) - set(OUTPUT_BC ${PROJECT_SOURCE_DIR}/${output}.bc) + set(OUTPUT_O ${PROJECT_BINARY_DIR}/${output}.o) + set(OUTPUT_BC ${PROJECT_BINARY_DIR}/${output}.bc) list(APPEND ${OUTLIST_O} ${OUTPUT_O}) list(APPEND ${OUTLIST_BC} ${OUTPUT_BC}) @@ -205,8 +210,9 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH) if (INDEX EQUAL -1) set(DI_CMD "") else (INDEX EQUAL -1) + string(REGEX REPLACE "src/ldc" "src/core" output ${output}) string(REGEX REPLACE "^src/" "" di_output ${output}) - set(DI_CMD -Hf=${CMAKE_BINARY_DIR}/import/${di_output}.di) + set(DI_CMD -Hf=${PROJECT_BINARY_DIR}/import/${di_output}.di) list(REMOVE_AT GENERATE_DI ${INDEX}) endif (INDEX EQUAL -1) @@ -215,11 +221,12 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH) OUTPUT ${OUTPUT_O} ${OUTPUT_BC} - COMMAND ${LDC_LOC} --output-o --output-bc -c -I${INCDIR} -I${RUNTIME_GC_DIR} ${INPUT_D} -of${OUTPUT_O} ${DI_CMD} ${D_FLAGS} ${MOREFLAGS} + COMMAND ${LDC_LOC} --output-o --output-bc -c -I${INCDIR} -I${RUNTIME_GC_DIR} ${INPUT_D} -of${OUTPUT_O} ${DI_CMD} ${D_FLAGS} ${MOREFLAGS} + WORKING_DIRECTORY ${PROJECT_PARENT_DIR} DEPENDS ${LDC_LOC} ${INPUT_D} ${LDC_IMPORTS} - ${PROJECT_SOURCE_DIR}/../bin/${LDC_EXE}.conf + ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}.conf ) endmacro(dc) @@ -239,19 +246,21 @@ foreach(f ${DCRT_D}) endif(D_VERSION EQUAL 1) endforeach(f) -if(BUILD_SINGLE_LIB) - add_library(${RUNTIME_AIO} ${D_LIBRARY_TYPE} ${CORE_O} ${CORE_C} ${GC_O} ${DCRT_O} ${DCRT_C}) - set(LIBS ${RUNTIME_AIO}) -else(BUILD_SINGLE_LIB) - add_library(${RUNTIME_CC} ${D_LIBRARY_TYPE} ${CORE_O} ${CORE_C}) - add_library(${RUNTIME_GC} ${D_LIBRARY_TYPE} ${GC_O}) - add_library(${RUNTIME_DC} ${D_LIBRARY_TYPE} ${DCRT_O} ${DCRT_C}) - set(LIBS - ${RUNTIME_CC} - ${RUNTIME_GC} - ${RUNTIME_DC} - ) -endif(BUILD_SINGLE_LIB) +if(EXISTS ${PROJECT_PARENT_DIR}/${RUNTIME}) + if(BUILD_SINGLE_LIB) + add_library(${RUNTIME_AIO} ${D_LIBRARY_TYPE} ${CORE_O} ${CORE_C} ${GC_O} ${DCRT_O} ${DCRT_C}) + set(LIBS ${RUNTIME_AIO}) + else(BUILD_SINGLE_LIB) + add_library(${RUNTIME_CC} ${D_LIBRARY_TYPE} ${CORE_O} ${CORE_C}) + add_library(${RUNTIME_GC} ${D_LIBRARY_TYPE} ${GC_O}) + add_library(${RUNTIME_DC} ${D_LIBRARY_TYPE} ${DCRT_O} ${DCRT_C}) + set(LIBS + ${RUNTIME_CC} + ${RUNTIME_GC} + ${RUNTIME_DC} + ) + endif(BUILD_SINGLE_LIB) +endif(EXISTS ${PROJECT_PARENT_DIR}/${RUNTIME}) if(BUILD_BC_LIBS) find_program(LLVM_AR_EXE llvm-ar ${LLVM_INSTDIR}/bin DOC "path to llvm-ar tool") @@ -271,7 +280,7 @@ if(BUILD_BC_LIBS) COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_GC}-bc.a ${GC_BC} # cannot parse genobj.bc if built with -g # COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_DC}-bc.a ${DCRT_BC} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/../lib + WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} DEPENDS ${CORE_BC} ${GC_BC} @@ -281,11 +290,18 @@ if(BUILD_BC_LIBS) set(BCLIBS bclibs) endif(BUILD_BC_LIBS) +if(D_VERSION EQUAL 2) + if(NOT PROJECT_BINARY_DIR STREQUAL "${PROJECT_SOURCE_DIR}") + file(COPY ${PROJECT_PARENT_DIR}/${RUNTIME} DESTINATION ${PROJECT_BINARY_DIR}/../) + file(COPY ${PROJECT_PARENT_DIR}/phobos DESTINATION ${PROJECT_BINARY_DIR}/../) + endif(NOT PROJECT_BINARY_DIR STREQUAL "${PROJECT_SOURCE_DIR}") +endif(D_VERSION EQUAL 2) + set_target_properties( ${LIBS} PROPERTIES LINKER_LANGUAGE C - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../lib - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../lib + ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} + LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} ) # BCLIBS is empty if BUILD_BC_LIBS is not selected @@ -309,8 +325,8 @@ if(PHOBOS2_DIR) set_target_properties( lphobos2 PROPERTIES LINKER_LANGUAGE C - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../lib - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../lib + ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} + LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} ) add_custom_target(phobos2 DEPENDS lphobos2) endif(PHOBOS2_DIR)