diff --git a/.gitignore b/.gitignore index 3867b9dbf..8e401a7df 100644 --- a/.gitignore +++ b/.gitignore @@ -72,5 +72,4 @@ tags .idea # external plugins -/plugins/external/ /plugins/CMakeLists.custom.txt diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 22983d617..b8cd25860 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -189,6 +189,17 @@ if(BUILD_SKELETON) add_subdirectory(skeleton) endif() +macro(subdirlist result subdir) + file(GLOB children ABSOLUTE ${subdir}/ ${subdir}/*/) + set(dirlist "") + foreach(child ${children}) + if(IS_DIRECTORY ${child}) + file(RELATIVE_PATH child ${CMAKE_CURRENT_SOURCE_DIR}/${subdir} ${child}) + list(APPEND dirlist ${child}) + endif() + endforeach() + set(${result} ${dirlist}) +endmacro() # To add "external" plugins without committing them to the DFHack repo: # @@ -204,7 +215,7 @@ endif() # 4. build DFHack as normal. The plugins you added will be built as well. if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/external/CMakeLists.txt") - file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/external/CMakeLists.txt" + set(content_str "# Add external plugins here - this file is ignored by git # Recommended: use add_subdirectory() for folders that you have created within @@ -212,9 +223,14 @@ if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/external/CMakeLists.txt") # See the end of /plugins/CMakeLists.txt for more details. ") + subdirlist(SUBDIRS external) + foreach(subdir ${SUBDIRS}) + set(content_str "${content_str}add_subdirectory(${subdir})\n") + endforeach() + file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/external/CMakeLists.txt" ${content_str}) endif() -include("${CMAKE_CURRENT_SOURCE_DIR}/external/CMakeLists.txt") +add_subdirectory(external) # for backwards compatibility if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.custom.txt") diff --git a/plugins/external/.gitignore b/plugins/external/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/plugins/external/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore