소스 검색

cmake: refactor + use configure files for installers and macros

Stéphane Lepin 5 년 전
부모
커밋
e11520cb22
5개의 변경된 파일129개의 추가작업 그리고 182개의 파일을 삭제
  1. 99 50
      CMakeLists.txt
  2. 19 5
      installer/installer-Windows.iss.in
  3. 5 122
      installer/installer-macOS.pkgproj.in
  4. 4 2
      src/plugin-macros.h.in
  5. 2 3
      src/plugin-main.c

+ 99 - 50
CMakeLists.txt

@@ -1,18 +1,24 @@
-cmake_minimum_required(VERSION 3.2)
-project(obs-plugintemplate)
+cmake_minimum_required(VERSION 3.5)
+project(obs-plugintemplate VERSION 1.0.0)
+
+set(PLUGIN_AUTHOR "Your Name Here")
+set(MACOS_BUNDLEID "com.example.obs-plugintemplate")
 
 set(CMAKE_PREFIX_PATH "${QTDIR}")
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTOUIC ON)
 
+# In case you need C++
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
 if (WIN32 OR APPLE)
 include(external/FindLibObs.cmake)
 endif()
 
 find_package(LibObs REQUIRED)
-find_package(Qt5Core REQUIRED)
-find_package(Qt5Widgets REQUIRED)
+find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
 
 set(PLUGIN_SOURCES
 	src/plugin-main.c)
@@ -20,20 +26,35 @@ set(PLUGIN_SOURCES
 set(PLUGIN_HEADERS
 	src/plugin-macros.h)
 
+configure_file(
+    src/plugin-macros.h.in
+    src/plugin-macros.h
+)
+
+configure_file(
+    installer/installer-macOS.pkgproj.in
+    installer/installer-macOS.pkgproj
+)
+
+configure_file(
+    installer/installer-Windows.iss.in
+    installer/installer-Windows.iss
+)
+
 # --- Platform-independent build settings ---
-add_library(obs-plugintemplate MODULE
-	${PLUGIN_SOURCES}
-	${PLUGIN_HEADERS})
+add_library(${CMAKE_PROJECT_NAME} MODULE ${PLUGIN_SOURCES} ${PLUGIN_HEADERS})
 
 include_directories(
 	"${LIBOBS_INCLUDE_DIR}/../UI/obs-frontend-api"
 	${Qt5Core_INCLUDES}
-	${Qt5Widgets_INCLUDES})
+	${Qt5Widgets_INCLUDES}
+)
 
-target_link_libraries(obs-plugintemplate
+target_link_libraries(${CMAKE_PROJECT_NAME}
 	libobs
 	Qt5::Core
-	Qt5::Widgets)
+	Qt5::Widgets
+)
 
 # --- End of section ---
 
@@ -44,6 +65,11 @@ if(WIN32)
 		message(FATAL_ERROR "Could not find OBS Frontend API\'s library !")
 	endif()
 
+    # Enable Multicore Builds and disable FH4 (to not depend on VCRUNTIME140_1.DLL when building with VS2019)
+    if (MSVC)
+        add_definitions(/MP /d2FH4-)
+    endif()
+
 	if(CMAKE_SIZEOF_VOID_P EQUAL 8)
 		set(ARCH_NAME "64bit")
 		set(OBS_BUILDDIR_ARCH "build64")
@@ -56,42 +82,65 @@ if(WIN32)
 		"${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/UI"
 	)
 
-	target_link_libraries(obs-plugintemplate
-		"${OBS_FRONTEND_LIB}")
+	target_link_libraries(${CMAKE_PROJECT_NAME}
+		"${OBS_FRONTEND_LIB}"
+    )
 
 	# --- Release package helper ---
 	# The "release" folder has a structure similar OBS' one on Windows
 	set(RELEASE_DIR "${PROJECT_SOURCE_DIR}/release")
 
-	add_custom_command(TARGET obs-plugintemplate POST_BUILD
-		COMMAND if $<CONFIG:Release>==1 (
-			"${CMAKE_COMMAND}" -E make_directory
-			"${RELEASE_DIR}/data/obs-plugins/${CMAKE_PROJECT_NAME}"
-			"${RELEASE_DIR}/obs-plugins/${ARCH_NAME}")
-
-		COMMAND if $<CONFIG:Release>==1 ("${CMAKE_COMMAND}" -E copy_directory
-			"${PROJECT_SOURCE_DIR}/data"
-			"${RELEASE_DIR}/data/obs-plugins/${CMAKE_PROJECT_NAME}")
-
-		COMMAND if $<CONFIG:Release>==1 ("${CMAKE_COMMAND}" -E copy
-			"$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"
-			"${RELEASE_DIR}/obs-plugins/${ARCH_NAME}")
-
-		# Copy to obs-studio dev environment for immediate testing
-		COMMAND if $<CONFIG:Debug>==1 (
-			"${CMAKE_COMMAND}" -E copy
-				"$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"
-				"${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/obs-plugins/${ARCH_NAME}")
-
-		COMMAND if $<CONFIG:Debug>==1 (
-			"${CMAKE_COMMAND}" -E make_directory
-				"${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/data/obs-plugins/${CMAKE_PROJECT_NAME}")
-
-		COMMAND if $<CONFIG:Debug>==1 (
-			"${CMAKE_COMMAND}" -E copy_directory
-				"${PROJECT_SOURCE_DIR}/data"
-				"${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/data/obs-plugins/${CMAKE_PROJECT_NAME}")
-	)
+    add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
+        # If config is Release or RelWithDebInfo, package release files
+        COMMAND if $<CONFIG:Release>==1 OR $<CONFIG:RelWithDebInfo>==1 (
+            "${CMAKE_COMMAND}" -E make_directory
+                "${RELEASE_DIR}/data/obs-plugins/${CMAKE_PROJECT_NAME}"
+                "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}"
+        )
+
+        COMMAND if $<CONFIG:Release>==1 OR $<CONFIG:RelWithDebInfo>==1 (
+            "${CMAKE_COMMAND}" -E copy_directory
+                "${PROJECT_SOURCE_DIR}/data"
+                "${RELEASE_DIR}/data/obs-plugins/${CMAKE_PROJECT_NAME}"
+        )
+
+        COMMAND if $<CONFIG:Release>==1 OR $<CONFIG:RelWithDebInfo>==1 (
+            "${CMAKE_COMMAND}" -E copy
+                "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"
+                "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}"
+        )
+
+        # If config is RelWithDebInfo, copy the pdb file
+        COMMAND if $<CONFIG:RelWithDebInfo>==1 (
+            "${CMAKE_COMMAND}" -E copy
+                "$<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>"
+                "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}"
+        )
+
+        # Copy to obs-studio dev environment for immediate testing
+        COMMAND if $<CONFIG:Debug>==1 (
+            "${CMAKE_COMMAND}" -E copy
+                "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"
+                "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/obs-plugins/${ARCH_NAME}"
+        )
+
+        COMMAND if $<CONFIG:Debug>==1 (
+            "${CMAKE_COMMAND}" -E copy
+                "$<TARGET_PDB_FILE:${CMAKE_PROJECT_NAME}>"
+                "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/obs-plugins/${ARCH_NAME}"
+        )
+
+        COMMAND if $<CONFIG:Debug>==1 (
+            "${CMAKE_COMMAND}" -E make_directory
+                "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/data/obs-plugins/${CMAKE_PROJECT_NAME}"
+        )
+
+        COMMAND if $<CONFIG:Debug>==1 (
+            "${CMAKE_COMMAND}" -E copy_directory
+                "${PROJECT_SOURCE_DIR}/data"
+                "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$<CONFIG>/data/obs-plugins/${CMAKE_PROJECT_NAME}"
+        )
+    )
 	# --- End of sub-section ---
 
 endif()
@@ -99,18 +148,18 @@ endif()
 
 # --- Linux-specific build settings and tasks ---
 if(UNIX AND NOT APPLE)
-	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+    include(GNUInstallDirs)
 
-	set_target_properties(obs-plugintemplate PROPERTIES PREFIX "")
-	target_link_libraries(obs-plugintemplate
-		obs-frontend-api)
+	set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES PREFIX "")
+	target_link_libraries(${CMAKE_PROJECT_NAME} obs-frontend-api)
 
 	file(GLOB locale_files data/locale/*.ini)
 
-	install(TARGETS obs-plugintemplate
-		LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/obs-plugins")
+	install(TARGETS ${CMAKE_PROJECT_NAME}
+		LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/obs-plugins")
+
 	install(FILES ${locale_files}
-		DESTINATION "${CMAKE_INSTALL_PREFIX}/share/obs/obs-plugins/${CMAKE_PROJECT_NAME}/locale")
+		DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/obs/obs-plugins/${CMAKE_PROJECT_NAME}/locale")
 endif()
 # --- End of section ---
 
@@ -118,7 +167,7 @@ endif()
 if(APPLE)
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -fvisibility=default")
 
-	set_target_properties(obs-plugintemplate PROPERTIES PREFIX "")
-	target_link_libraries(obs-plugintemplate "${OBS_FRONTEND_LIB}")
+	set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES PREFIX "")
+	target_link_libraries(${CMAKE_PROJECT_NAME} "${OBS_FRONTEND_LIB}")
 endif()
 # -- End of section --

+ 19 - 5
installer/installer-Windows.iss → installer/installer-Windows.iss.in

@@ -1,6 +1,6 @@
-#define MyAppName "obs-plugintemplate"
-#define MyAppVersion "0.1.0"
-#define MyAppPublisher "Developer Name"
+#define MyAppName "@CMAKE_PROJECT_NAME@"
+#define MyAppVersion "@CMAKE_PROJECT_VERSION@"
+#define MyAppPublisher "@PLUGIN_AUTHOR@"
 #define MyAppURL "http://www.mywebsite.com"
 
 [Setup]
@@ -16,16 +16,16 @@ AppSupportURL={#MyAppURL}
 AppUpdatesURL={#MyAppURL}
 DefaultDirName={code:GetDirName}
 DefaultGroupName={#MyAppName}
-OutputBaseFilename=obs-websocket-{#MyAppVersion}-Windows-Installer
+OutputBaseFilename={#MyAppName}-{#MyAppVersion}-Windows-Installer
 Compression=lzma
 SolidCompression=yes
-LicenseFile=..\LICENSE
 
 [Languages]
 Name: "english"; MessagesFile: "compiler:Default.isl"
 
 [Files]
 Source: "..\release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "..\LICENSE"; Flags: dontcopy
 ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 
 [Icons]
@@ -33,6 +33,20 @@ Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
 Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
 
 [Code]
+procedure InitializeWizard();
+var
+  GPLText: AnsiString;
+  Page: TOutputMsgMemoWizardPage;
+begin
+  ExtractTemporaryFile('LICENSE');
+  LoadStringFromFile(ExpandConstant('{tmp}\LICENSE'), GPLText);
+  Page := CreateOutputMsgMemoPage(wpWelcome,
+    'License Information', 'Please review the license terms before installing {#MyAppName}',
+    'Press Page Down to see the rest of the agreement. Once you are aware of your rights, click Next to continue.',
+    String(GPLText)
+  );
+end;
+
 // credit where it's due :
 // following function come from https://github.com/Xaymar/obs-studio_amf-encoder-plugin/blob/master/%23Resources/Installer.in.iss#L45
 function GetDirName(Value: string): string;

+ 5 - 122
installer/installer-macOS.pkgproj → installer/installer-macOS.pkgproj.in

@@ -12,123 +12,6 @@
 			<dict>
 				<key>CHILDREN</key>
 				<array>
-					<dict>
-						<key>CHILDREN</key>
-						<array>
-							<dict>
-								<key>CHILDREN</key>
-								<array>
-									<dict>
-										<key>CHILDREN</key>
-										<array>
-											<dict>
-												<key>CHILDREN</key>
-												<array>
-													<dict>
-														<key>CHILDREN</key>
-														<array>
-															<dict>
-																<key>CHILDREN</key>
-																<array/>
-																<key>GID</key>
-																<integer>80</integer>
-																<key>PATH</key>
-																<string>../../build/QtNetwork</string>
-																<key>PATH_TYPE</key>
-																<integer>1</integer>
-																<key>PERMISSIONS</key>
-																<integer>292</integer>
-																<key>TYPE</key>
-																<integer>3</integer>
-																<key>UID</key>
-																<integer>0</integer>
-															</dict>
-															<dict>
-																<key>CHILDREN</key>
-																<array/>
-																<key>GID</key>
-																<integer>80</integer>
-																<key>PATH</key>
-																<string>../../build/QtWebSockets</string>
-																<key>PATH_TYPE</key>
-																<integer>1</integer>
-																<key>PERMISSIONS</key>
-																<integer>292</integer>
-																<key>TYPE</key>
-																<integer>3</integer>
-																<key>UID</key>
-																<integer>0</integer>
-															</dict>
-														</array>
-														<key>GID</key>
-														<integer>80</integer>
-														<key>PATH</key>
-														<string>bin</string>
-														<key>PATH_TYPE</key>
-														<integer>0</integer>
-														<key>PERMISSIONS</key>
-														<integer>509</integer>
-														<key>TYPE</key>
-														<integer>2</integer>
-														<key>UID</key>
-														<integer>0</integer>
-													</dict>
-												</array>
-												<key>GID</key>
-												<integer>80</integer>
-												<key>PATH</key>
-												<string>Resources</string>
-												<key>PATH_TYPE</key>
-												<integer>0</integer>
-												<key>PERMISSIONS</key>
-												<integer>509</integer>
-												<key>TYPE</key>
-												<integer>2</integer>
-												<key>UID</key>
-												<integer>0</integer>
-											</dict>
-										</array>
-										<key>GID</key>
-										<integer>80</integer>
-										<key>PATH</key>
-										<string>Contents</string>
-										<key>PATH_TYPE</key>
-										<integer>0</integer>
-										<key>PERMISSIONS</key>
-										<integer>509</integer>
-										<key>TYPE</key>
-										<integer>2</integer>
-										<key>UID</key>
-										<integer>0</integer>
-									</dict>
-								</array>
-								<key>GID</key>
-								<integer>80</integer>
-								<key>PATH</key>
-								<string>OBS.app</string>
-								<key>PATH_TYPE</key>
-								<integer>0</integer>
-								<key>PERMISSIONS</key>
-								<integer>509</integer>
-								<key>TYPE</key>
-								<integer>2</integer>
-								<key>UID</key>
-								<integer>0</integer>
-							</dict>
-						</array>
-						<key>GID</key>
-						<integer>80</integer>
-						<key>PATH</key>
-						<string>Applications</string>
-						<key>PATH_TYPE</key>
-						<integer>0</integer>
-						<key>PERMISSIONS</key>
-						<integer>509</integer>
-						<key>TYPE</key>
-						<integer>1</integer>
-						<key>UID</key>
-						<integer>0</integer>
-					</dict>
 					<dict>
 						<key>CHILDREN</key>
 						<array>
@@ -153,7 +36,7 @@
 																		<key>GID</key>
 																		<integer>80</integer>
 																		<key>PATH</key>
-																		<string>../../build/obs-websocket.so</string>
+																		<string>../../build/@CMAKE_PROJECT_NAME@.so</string>
 																		<key>PATH_TYPE</key>
 																		<integer>1</integer>
 																		<key>PERMISSIONS</key>
@@ -197,7 +80,7 @@
 														<key>GID</key>
 														<integer>80</integer>
 														<key>PATH</key>
-														<string>obs-websocket</string>
+														<string>@CMAKE_PROJECT_NAME@</string>
 														<key>PATH_TYPE</key>
 														<integer>0</integer>
 														<key>PERMISSIONS</key>
@@ -631,11 +514,11 @@
 			<key>CONCLUSION_ACTION</key>
 			<integer>0</integer>
 			<key>IDENTIFIER</key>
-			<string>fr.palakis.obswebsocket</string>
+			<string>@MACOS_BUNDLEID@</string>
 			<key>OVERWRITE_PERMISSIONS</key>
 			<false/>
 			<key>VERSION</key>
-			<string>5.0.0</string>
+			<string>@CMAKE_PROJECT_VERSION@</string>
 		</dict>
 		<key>PROJECT_COMMENTS</key>
 		<dict>
@@ -832,7 +715,7 @@
 				</dict>
 			</array>
 			<key>NAME</key>
-			<string>obs-websocket</string>
+			<string>@CMAKE_PROJECT_NAME@</string>
 		</dict>
 	</dict>
 	<key>TYPE</key>

+ 4 - 2
src/plugin-macros.h → src/plugin-macros.h.in

@@ -19,7 +19,9 @@ with this program. If not, see <https://www.gnu.org/licenses/>
 #ifndef PLUGINNAME_H
 #define PLUGINNAME_H
 
-#define MY_PLUGIN_NAME "obs-plugintemplate"
-#define blog(level, msg, ...) blog(level, "[" MY_PLUGIN_NAME "] " msg, ##__VA_ARGS__)
+#define PLUGIN_NAME "@CMAKE_PROJECT_NAME@"
+#define PLUGIN_VERSION "@CMAKE_PROJECT_VERSION@"
+
+#define blog(level, msg, ...) blog(level, "[" PLUGIN_NAME "] " msg, ##__VA_ARGS__)
 
 #endif // PLUGINNAME_H

+ 2 - 3
src/plugin-main.c

@@ -21,11 +21,11 @@ with this program. If not, see <https://www.gnu.org/licenses/>
 #include "plugin-macros.h"
 
 OBS_DECLARE_MODULE()
-OBS_MODULE_USE_DEFAULT_LOCALE(MY_PLUGIN_NAME, "en-US")
+OBS_MODULE_USE_DEFAULT_LOCALE(PLUGIN_NAME, "en-US")
 
 bool obs_module_load(void)
 {
-    blog(LOG_INFO, "plugin loaded successfully");
+    blog(LOG_INFO, "plugin loaded successfully (version %s)", PLUGIN_VERSION);
     return true;
 }
 
@@ -33,4 +33,3 @@ void obs_module_unload()
 {
     blog(LOG_INFO, "plugin unloaded");
 }
-