Mac OS X Frameworks Frameworks
Harald Fernengel
harryf at gmx.com
Sun Feb 23 19:15:50 UTC 2014
Hi,
TL;DR
Do we want to do build KDE Frameworks as Mac OS X Frameworks?
Long Story:
on Mac OS X, libraries are typically deployed as "Frameworks" (e.g. a
directory containing the shared library, headers, resources and meta
data). A framework can be simply dragged&dropped to Xcode projects and
it's also easier from command line:
clang++ -framework KF5Archive -framework QtCore main.cpp
(Assuming that Qt and KF5Archive are in a standard Framework path,
otherwise, add "-F /path/to/framework").
I tried to create an OS X Framework out of KArchive and ended up with
attached patch (see also https://git.reviewboard.kde.org/r/115977/)
What needs to happen on KF5 side?
1) All public headers must be added as source files (e.g. to
add_library()) and set as PUBLIC_HEADER property on the target. Instead
of a manual "install" rule, we need to set PUBLIC_HEADER DESTINATION to
the install TARGETS rule.
2) Public (installed) headers must use
#include "myOtherHeader" // (double quotes)
to include headers belonging to the same framework
3) Public headers must use
#include <KF5Whatever/foo.h>
to include headers belonging to other frameworks
Is that worth the hassle? If yes, I can try to convert some of our libs
to OS X frameworks, hoping not to break things for other platforms ;)
Harald
-------------- next part --------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f5dc644..0c59012 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,6 +53,8 @@ ecm_setup_version(${KF5_VERSION}
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5ArchiveConfigVersion.cmake"
)
+list(APPEND KArchive_GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/karchive_version.h)
+
add_subdirectory(src)
add_subdirectory(autotests)
add_subdirectory(tests)
@@ -69,10 +71,6 @@ ecm_configure_package_config_file(
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/karchive_version.h
- DESTINATION ${INCLUDE_INSTALL_DIR}
- COMPONENT Devel)
-
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/KF5ArchiveConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/KF5ArchiveConfigVersion.cmake"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 53e9728..2eaa05f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -34,7 +34,27 @@ set(karchive_SRCS
kzip.cpp
)
-add_library(KF5Archive ${karchive_SRCS} ${karchive_OPTIONAL_SRCS})
+ecm_generate_headers(KArchive_HEADERS
+ HEADER_NAMES
+ KArchive
+ KArchiveEntry
+ KArchiveFile
+ KArchiveDirectory
+ KAr
+ KCompressionDevice
+ KFilterBase
+ KFilterDev
+ KTar
+ KZip
+ KZipFileEntry
+
+ REQUIRED_HEADERS KArchive_HEADERS
+)
+
+list(APPEND KArchive_GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/karchive_export.h)
+
+add_library(KF5Archive ${karchive_SRCS} ${karchive_OPTIONAL_SRCS} ${KArchive_HEADERS} ${KArchive_GENERATED_HEADERS})
+set_target_properties(KF5Archive PROPERTIES FRAMEWORK TRUE)
generate_export_header(KF5Archive BASE_NAME KArchive)
add_library(KF5::Archive ALIAS KF5Archive)
@@ -56,25 +76,12 @@ set_target_properties(KF5Archive PROPERTIES
EXPORT_NAME "Archive"
)
-ecm_generate_headers(KArchive_HEADERS
- HEADER_NAMES
- KArchive
- KArchiveEntry
- KArchiveFile
- KArchiveDirectory
- KAr
- KCompressionDevice
- KFilterBase
- KFilterDev
- KTar
- KZip
- KZipFileEntry
-
- REQUIRED_HEADERS KArchive_HEADERS
-)
+set_target_properties(KF5Archive PROPERTIES PUBLIC_HEADER "${KArchive_HEADERS};${KArchive_GENERATED_HEADERS}")
install(TARGETS KF5Archive
EXPORT KF5ArchiveTargets
+ FRAMEWORK DESTINATION "${LIB_INSTALL_DIR}"
+ PUBLIC_HEADER DESTINATION "${INCLUDE_INSTALL_DIR}/KArchive"
${INSTALL_TARGETS_DEFAULT_ARGS})
if(LIBLZMA_FOUND)
@@ -85,12 +92,6 @@ if(LIBLZMA_FOUND)
)
endif()
-install(FILES
- ${CMAKE_CURRENT_BINARY_DIR}/karchive_export.h
- ${KArchive_HEADERS}
- DESTINATION ${INCLUDE_INSTALL_DIR}/KArchive
- COMPONENT Devel)
-
include(ECMGeneratePriFile)
ecm_generate_pri_file(
BASE_NAME KArchive
diff --git a/src/karchive.h b/src/karchive.h
index d4209cf..a75d240 100644
--- a/src/karchive.h
+++ b/src/karchive.h
@@ -29,7 +29,7 @@
#include <QtCore/QStringList>
#include <QtCore/QHash>
-#include <karchive_export.h>
+#include "karchive_export.h"
#ifdef Q_OS_WIN
#include <qplatformdefs.h> // mode_t
diff --git a/src/karchivedirectory.h b/src/karchivedirectory.h
index 60225d0..d234fc8 100644
--- a/src/karchivedirectory.h
+++ b/src/karchivedirectory.h
@@ -28,7 +28,7 @@
#include <QtCore/QString>
#include <QtCore/QStringList>
-#include <karchiveentry.h>
+#include "karchiveentry.h"
class KArchiveDirectoryPrivate;
/**
diff --git a/src/karchiveentry.h b/src/karchiveentry.h
index aad6840..d5c68a9 100644
--- a/src/karchiveentry.h
+++ b/src/karchiveentry.h
@@ -24,7 +24,7 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <karchive_export.h>
+#include "karchive_export.h"
#ifdef Q_OS_WIN
#include <qplatformdefs.h> // mode_t
diff --git a/src/karchivefile.h b/src/karchivefile.h
index c7d2e0e..0d39794 100644
--- a/src/karchivefile.h
+++ b/src/karchivefile.h
@@ -21,7 +21,7 @@
#ifndef KARCHIVEFILE_H
#define KARCHIVEFILE_H
-#include <karchiveentry.h>
+#include "karchiveentry.h"
class KArchiveFilePrivate;
/**
diff --git a/src/ktar.h b/src/ktar.h
index 4bca898..a80022d 100644
--- a/src/ktar.h
+++ b/src/ktar.h
@@ -19,7 +19,7 @@
#ifndef KTAR_H
#define KTAR_H
-#include <karchive.h>
+#include "karchive.h"
/**
* A class for reading / writing (optionally compressed) tar archives.
More information about the Kde-frameworks-devel
mailing list