Rework CMakeLists.txt so project is compiled without intermediary libraries.

This commit is contained in:
2021-04-24 20:26:43 +01:00
parent ea076dc481
commit 9c8a39d61e
14 changed files with 113 additions and 155 deletions

View File

@@ -22,15 +22,77 @@
# Copyright (C) 2011-2021 Natalia Portillo # Copyright (C) 2011-2021 Natalia Portillo
# *****************************************************************************/ # *****************************************************************************/
cmake_minimum_required(VERSION 2.20) cmake_minimum_required(VERSION 2.8)
project(setter C) project(fssetter-test
DESCRIPTION "Filesystem test creator"
LANGUAGES C)
set(CMAKE_C_STANDARD 90) set(CMAKE_C_STANDARD 90)
message("Detected system name: ${CMAKE_SYSTEM_NAME}") message("Detected system name: ${CMAKE_SYSTEM_NAME}")
message("Detected system processor: ${CMAKE_SYSTEM_PROCESSOR}") message("Detected system processor: ${CMAKE_SYSTEM_PROCESSOR}")
# It's best to hide all the details of setting up the variable SRCS in a CMake
# macro. The macro can then be called in all the project CMake list files to add
# sources.
#
# The macro first computes the path of the source file relative to the project
# root for each argument. If the macro is invoked from inside a project sub
# directory the new value of the variable SRCS needs to be propagated to the
# parent folder by using the PARENT_SCOPE option.
#
# Source: http://stackoverflow.com/questions/7046956/populating-srcs-from-cmakelists-txt-in-subdirectories
macro(add_sources)
file(RELATIVE_PATH _relPath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
foreach(_src ${ARGN})
if(_relPath)
list(APPEND SRCS "${_relPath}/${_src}")
else()
list(APPEND SRCS "${_src}")
endif()
endforeach()
if(_relPath)
# propagate to parent directory
set(SRCS ${SRCS} PARENT_SCOPE)
endif()
endmacro()
# Based on add_sources() but to add compiler definitions
macro(add_sub_definitions)
file(RELATIVE_PATH _relPath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
foreach(_def ${ARGN})
list(APPEND PRJ_DEFINITIONS "${_def}")
endforeach()
if(_relPath)
# propagate to parent directory
set(PRJ_DEFINITIONS ${PRJ_DEFINITIONS} PARENT_SCOPE)
endif()
endmacro()
# Based on add_sources() but to add libraries
macro(add_sub_libraries)
file(RELATIVE_PATH _relPath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
foreach(_lib ${ARGN})
list(APPEND PRJ_LIBRARIES "${_lib}")
endforeach()
if(_relPath)
# propagate to parent directory
set(PRJ_LIBRARIES ${PRJ_LIBRARIES} PARENT_SCOPE)
endif()
endmacro()
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_subdirectory(src) add_subdirectory(src)
add_compile_definitions(${PRJ_DEFINITIONS})
if(${CMAKE_SYSTEM_NAME} MATCHES "Retro68|RetroPPC")
add_application(${EXECUTABLE_NAME} ${SRCS})
else()
add_executable(${EXECUTABLE_NAME} ${SRCS})
endif()
target_link_libraries(${EXECUTABLE_NAME} ${PRJ_LIBRARIES})

View File

@@ -22,14 +22,19 @@
# Copyright (C) 2011-2021 Natalia Portillo # Copyright (C) 2011-2021 Natalia Portillo
# *****************************************************************************/ # *****************************************************************************/
set(MAIN_SOURCES main.c main.h log.c log.h)
add_library(core ${MAIN_SOURCES})
add_subdirectory(macos) add_subdirectory(macos)
add_subdirectory(dos) add_subdirectory(dos)
add_subdirectory(win32) add_subdirectory(win32)
add_subdirectory(unix) add_subdirectory(unix)
add_subdirectory(beos) add_subdirectory(beos)
add_subdirectory(amiga) add_subdirectory(amiga)
add_subdirectory(os2) add_subdirectory(os2)
# This must be after all directories
add_sources(main.c main.h log.c log.h)
# Even if empty it needs to be present
add_sub_definitions()
# Even if empty it needs to be present
add_sub_libraries()

View File

@@ -26,18 +26,7 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "AmigaOS|MorphOS" AND NOT AROS)
return() return()
endif() endif()
project( add_sub_definitions(__USE_INLINE__)
fssetter-amiga add_sub_definitions(__USE_BASETYPE__)
DESCRIPTION "Filesystem test creator for AmigaOS and compatibles"
LANGUAGES C)
add_definitions(-D__USE_INLINE__) add_sources(attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c perms.h rsrcfork.c sparse.c time.c time.h volume.c xattr.c)
add_definitions(-D__USE_BASETYPE__)
set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c perms.h rsrcfork.c sparse.c time.c time.h volume.c xattr.c)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core)

View File

@@ -26,15 +26,4 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "BeOS|Haiku")
return() return()
endif() endif()
project( add_sources(attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c perms.h rsrcfork.c sparse.c time.c time.h volume.c volume.h xattr.c xattr.h)
fssetter-beos
DESCRIPTION "Filesystem test creator for BeOS and Haiku"
LANGUAGES C)
set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c perms.h rsrcfork.c sparse.c time.c time.h volume.c volume.h xattr.c xattr.h)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core)

View File

@@ -26,14 +26,4 @@ if(NOT DOS)
return() return()
endif() endif()
project(fssetter-dos add_sources(attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c dostime.h time.c volume.c xattr.c dos.c attr.h dosuname.c dosuname.h dosdefs.h djgpp.c)
DESCRIPTION "Filesystem test creator for DOS"
LANGUAGES C)
set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c dostime.h time.c volume.c xattr.c dos.c attr.h dosuname.c dosuname.h dosdefs.h djgpp.c)
set(EXECUTABLE_NAME "fssetter")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core)

View File

@@ -29,13 +29,8 @@ endif()
include(CheckIncludeFiles) include(CheckIncludeFiles)
include(CheckSymbolExists) include(CheckSymbolExists)
project( add_sub_definitions(macintosh)
fssetter-macos add_sub_definitions(Retro68)
DESCRIPTION "Filesystem test creator for MacOS"
LANGUAGES C)
add_definitions(-Dmacintosh)
add_definitions(-DRetro68)
CHECK_INCLUDE_FILES("Aliases.h" HAVE_ALIASES_H) CHECK_INCLUDE_FILES("Aliases.h" HAVE_ALIASES_H)
CHECK_INCLUDE_FILES("FileTypesAndCreators.h" HAVE_FILE_TYPES_AND_CREATORS_H) CHECK_INCLUDE_FILES("FileTypesAndCreators.h" HAVE_FILE_TYPES_AND_CREATORS_H)
@@ -43,33 +38,25 @@ CHECK_INCLUDE_FILES("Multiverse.h" HAVE_MULTIVERSE_H)
CHECK_SYMBOL_EXISTS(PBXGetVolInfo Files.h HAVE_PBXGETVOLINFO) CHECK_SYMBOL_EXISTS(PBXGetVolInfo Files.h HAVE_PBXGETVOLINFO)
if(HAVE_ALIASES_H) if(HAVE_ALIASES_H)
add_definitions(-DHAVE_ALIASES_H) add_sub_definitions(HAVE_ALIASES_H)
endif() endif()
if(HAVE_FILE_TYPES_AND_CREATORS_H) if(HAVE_FILE_TYPES_AND_CREATORS_H)
add_definitions(-DHAVE_FILE_TYPES_AND_CREATORS_H) add_sub_definitions(HAVE_FILE_TYPES_AND_CREATORS_H)
endif() endif()
if(HAVE_MULTIVERSE_H) if(HAVE_MULTIVERSE_H)
add_definitions(-DHAVE_MULTIVERSE_H) add_sub_definitions(HAVE_MULTIVERSE_H)
endif() endif()
if(NOT HAVE_PBXGETVOLINFO) if(NOT HAVE_PBXGETVOLINFO)
add_definitions(-DNO_PBXGETVOLINFO) add_sub_definitions(NO_PBXGETVOLINFO)
endif() endif()
set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c time.c volume.c xattr.c macos.h macos.r retro68.h attr.h time.h rsrcfork.h links.h) add_sources(attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c time.c volume.c xattr.c macos.h macos.r retro68.h attr.h time.h rsrcfork.h links.h)
if(${CMAKE_SYSTEM_NAME} MATCHES "Retro68") if(${CMAKE_SYSTEM_NAME} MATCHES "Retro68")
set(PROCESSOR "m68k") set(PROCESSOR "m68k")
else() else()
set(PROCESSOR "ppc") set(PROCESSOR "ppc")
endif() endif()
set(EXECUTABLE_NAME "fssetter-macos-${PROCESSOR}")
#add_application(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
#target_link_libraries(${EXECUTABLE_NAME} core)
add_application(${EXECUTABLE_NAME} ../main.c ../log.c ${PLATFORM_SOURCES})

View File

@@ -26,14 +26,4 @@ if(NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "I86")
return() return()
endif() endif()
project(fssetter-os2 add_sources(os.c xattr.c xattr.h)
DESCRIPTION "Filesystem test creator for 16-bit OS/2"
LANGUAGES C)
set(SUBPLATFORM_SOURCES os.c xattr.c xattr.h)
set(EXECUTABLE_NAME "fssetter")
add_executable(${EXECUTABLE_NAME} ${SUBPLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core platform)

View File

@@ -26,16 +26,4 @@ if(NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i386|X86")
return() return()
endif() endif()
project(fssetter-os2 add_sources(os.c xattr.c)
DESCRIPTION "Filesystem test creator for 32-bit OS/2"
LANGUAGES C)
set(SUBPLATFORM_SOURCES os.c xattr.c)
set(EXECUTABLE_NAME "fssetter32")
find_library(OS2LIB "os2386")
add_executable(${EXECUTABLE_NAME} ${SUBPLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core platform)

View File

@@ -26,10 +26,7 @@ if(NOT OS2)
return() return()
endif() endif()
set(PLATFORM_SOURCES attr.c attr.h deleted.c dirdepth.c filename.c files.c frag.c links.c os2defs.h perms.c rsrcfork.c sparse.c time.c volume.c)
add_library(platform ${PLATFORM_SOURCES})
add_subdirectory(16bit) add_subdirectory(16bit)
add_subdirectory(32bit) add_subdirectory(32bit)
add_sources(attr.c attr.h deleted.c dirdepth.c filename.c files.c frag.c links.c os2defs.h perms.c rsrcfork.c sparse.c time.c volume.c)

View File

@@ -36,21 +36,22 @@ CHECK_SYMBOL_EXISTS(statvfs "sys/statvfs.h" HAVE_SYS_STATVFS)
if(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") if(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
message("-- Forcing statfs in sys/mount.h due to OpenBSD") message("-- Forcing statfs in sys/mount.h due to OpenBSD")
add_definitions(-DHAVE_SYS_MOUNT_H) add_sub_definitions(HAVE_SYS_MOUNT_H)
add_definitions(-DNEED_SYS_TYPES_H) add_sub_definitions(NEED_SYS_TYPES_H)
set(HAVE_STATFS_FTYPENAME 1) set(HAVE_STATFS_FTYPENAME 1)
set(HAVE_STATFS_NAMEMAX 1) set(HAVE_STATFS_NAMEMAX 1)
# Linux and FreeBSD # Linux and FreeBSD
elseif(HAVE_SYS_STATFS) elseif(HAVE_SYS_STATFS)
message("-- Found statfs in sys/statfs.h") message("-- Found statfs in sys/statfs.h")
add_definitions(-DHAVE_SYS_STATFS_H) add_sub_definitions(HAVE_SYS_STATFS_H)
add_sub_definitions(TEST)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namelen" "sys/statfs.h" HAVE_STATFS_FNAMELEN) CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namelen" "sys/statfs.h" HAVE_STATFS_FNAMELEN)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_fstypename" "sys/statfs.h" HAVE_STATFS_FTYPENAME) CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_fstypename" "sys/statfs.h" HAVE_STATFS_FTYPENAME)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namemax" "sys/statfs.h" HAVE_STATFS_NAMEMAX) CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namemax" "sys/statfs.h" HAVE_STATFS_NAMEMAX)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_type" "sys/statfs.h" HAVE_STATFS_FTYPE) CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_type" "sys/statfs.h" HAVE_STATFS_FTYPE)
elseif(HAVE_SYS_MOUNT) # Darwin and most other BSDs elseif(HAVE_SYS_MOUNT) # Darwin and most other BSDs
message("-- Found statfs in sys/mount.h") message("-- Found statfs in sys/mount.h")
add_definitions(-DHAVE_SYS_MOUNT_H) add_sub_definitions(HAVE_SYS_MOUNT_H)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namelen" "sys/mount.h" HAVE_STATFS_FNAMELEN) CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namelen" "sys/mount.h" HAVE_STATFS_FNAMELEN)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_fstypename" "sys/mount.h" HAVE_STATFS_FTYPENAME) CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_fstypename" "sys/mount.h" HAVE_STATFS_FTYPENAME)
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # It's giving false positives sometimes if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # It's giving false positives sometimes
@@ -59,7 +60,7 @@ elseif(HAVE_SYS_MOUNT) # Darwin and most other BSDs
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_type" "sys/mount.h" HAVE_STATFS_FTYPE) CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_type" "sys/mount.h" HAVE_STATFS_FTYPE)
elseif(HAVE_SYS_STATVFS) # NetBSD >= 3.0 elseif(HAVE_SYS_STATVFS) # NetBSD >= 3.0
message("-- Found statvfs in sys/statvfs.h") message("-- Found statvfs in sys/statvfs.h")
add_definitions(-DHAVE_SYS_STATVFS_H) add_sub_definitions(HAVE_SYS_STATVFS_H)
CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_namemax" "sys/statvfs.h" HAVE_STATFS_NAMEMAX) CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_namemax" "sys/statvfs.h" HAVE_STATFS_NAMEMAX)
CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_fstypename" "sys/statvfs.h" HAVE_STATFS_FTYPENAME) CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_fstypename" "sys/statvfs.h" HAVE_STATFS_FTYPENAME)
CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_type" "sys/statvfs.h" HAVE_STATFS_FTYPE) CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_type" "sys/statvfs.h" HAVE_STATFS_FTYPE)
@@ -67,23 +68,24 @@ endif()
if(HAVE_STATFS_FNAMELEN) if(HAVE_STATFS_FNAMELEN)
message("-- statfs has f_namelen member") message("-- statfs has f_namelen member")
add_definitions(-DUSE_STATFS_FNAMELEN) add_sub_definitions(USE_STATFS_FNAMELEN)
endif() endif()
if(HAVE_STATFS_FTYPENAME) if(HAVE_STATFS_FTYPENAME)
message("-- statfs has f_fstypename member") message("-- statfs has f_fstypename member")
add_definitions(-DUSE_STATFS_FTYPENAME) add_sub_definitions(USE_STATFS_FTYPENAME)
endif() endif()
if(HAVE_STATFS_NAMEMAX) if(HAVE_STATFS_NAMEMAX)
message("-- statfs has f_namemax member") message("-- statfs has f_namemax member")
add_definitions(-DUSE_STATFS_NAMEMAX) add_sub_definitions(USE_STATFS_NAMEMAX)
endif() endif()
set(UNIX_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c time.c volume.c xattr.c time.h)
add_library(unix ${UNIX_SOURCES})
add_subdirectory(darwin) add_subdirectory(darwin)
add_subdirectory(linux) add_subdirectory(linux)
add_subdirectory(bsd) add_subdirectory(bsd)
# Even if empty it needs to be present
add_sub_libraries()
add_sources(attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c time.c volume.c xattr.c time.h)

View File

@@ -26,15 +26,4 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "^(([^k].*)?BSD|DragonFly)$" )
return() return()
endif() endif()
project( add_sources(bsd.h xattr.c xattr.h attr.c attr.h volume.c volume.h)
fssetter-bsd
DESCRIPTION "Filesystem test creator for BSD"
LANGUAGES C)
set(PLATFORM_SOURCES bsd.h xattr.c xattr.h attr.c attr.h volume.c volume.h)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core unix)

View File

@@ -26,25 +26,15 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
return() return()
endif() endif()
project(fssetter-darwin
DESCRIPTION "Filesystem test creator for Darwin"
LANGUAGES C)
find_library(CARBON_LIBRARY NAMES Carbon) find_library(CARBON_LIBRARY NAMES Carbon)
set(PLATFORM_SOURCES os.c darwin.h volume.c volume.h attr.c attr.h rsrcfork.c rsrcfork.h sparse.c xattr.c xattr.h) add_sources(os.c darwin.h volume.c volume.h attr.c attr.h rsrcfork.c rsrcfork.h sparse.c xattr.c xattr.h)
if(CARBON_LIBRARY) if(CARBON_LIBRARY)
add_definitions("-DHAVE_CARBON") add_sub_definitions(HAVE_CARBON)
set(PLATFORM_SOURCES ${PLATFORM_SOURCES} carbon.c carbon.h) add_sources(carbon.c carbon.h)
endif() endif()
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
if(CARBON_LIBRARY) if(CARBON_LIBRARY)
target_link_libraries(${EXECUTABLE_NAME} core unix ${CARBON_LIBRARY}) add_sub_libraries(${CARBON_LIBRARY})
else() endif()
target_link_libraries(${EXECUTABLE_NAME} core unix)
endif()

View File

@@ -26,15 +26,6 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Linux")
return() return()
endif() endif()
project( add_sources(attr.c sparse.c xattr.c xattr.h volume.c volume.h)
fssetter-linux
DESCRIPTION "Filesystem test creator for Linux"
LANGUAGES C)
set(PLATFORM_SOURCES attr.c sparse.c xattr.c xattr.h volume.c volume.h) add_sub_libraries(dl)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core unix dl)

View File

@@ -26,15 +26,4 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
return() return()
endif() endif()
project( add_sources(attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c time.c volume.c xattr.c attr.h rsrcfork.h xattr.h links.h volume.h timew32.h os.h sparse.h)
fssetter-win32
DESCRIPTION "Filesystem test creator for 32-bit and 64-bit Windows"
LANGUAGES C)
set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c time.c volume.c xattr.c attr.h rsrcfork.h xattr.h links.h volume.h timew32.h os.h sparse.h)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core)