forked from elliotttate/SpliceKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
135 lines (118 loc) · 6.75 KB
/
Makefile
File metadata and controls
135 lines (118 loc) · 6.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
CC = clang
ARCHS = -arch arm64 -arch x86_64
MIN_VERSION = -mmacosx-version-min=14.0
FRAMEWORKS = -framework Foundation -framework AppKit -framework AVFoundation -framework CoreServices
OBJC_FLAGS = -fobjc-arc -fmodules
LINKER_FLAGS = -undefined dynamic_lookup -dynamiclib
INSTALL_NAME = -install_name @rpath/SpliceKit.framework/Versions/A/SpliceKit
SOURCES = Sources/SpliceKit.m \
Sources/SpliceKitDualTimeline.m \
Sources/SpliceKitDualTimelineDrag.m \
Sources/SpliceKitRuntime.m \
Sources/SpliceKitSwizzle.m \
Sources/SpliceKitServer.m \
Sources/SpliceKitLogPanel.m \
Sources/SpliceKitTranscriptPanel.m \
Sources/SpliceKitCaptionPanel.m \
Sources/SpliceKitCommandPalette.m \
Sources/SpliceKitDebugUI.m \
Sources/SpliceKitLua.m \
Sources/SpliceKitLuaPanel.m
BUILD_DIR = build
OUTPUT = $(BUILD_DIR)/SpliceKit
# Lua 5.4.7 (vendored, compiled as static lib)
LUA_DIR = vendor/lua-5.4.7/src
LUA_SRCS = $(filter-out $(LUA_DIR)/lua.c $(LUA_DIR)/luac.c, $(wildcard $(LUA_DIR)/*.c))
LUA_OBJS = $(patsubst $(LUA_DIR)/%.c, $(BUILD_DIR)/lua/%.o, $(LUA_SRCS))
LUA_LIB = $(BUILD_DIR)/liblua.a
# Modded app paths — auto-detect standard or Creator Studio edition
MODDED_APP_STANDARD = $(HOME)/Applications/SpliceKit/Final Cut Pro.app
MODDED_APP_CREATOR = $(HOME)/Applications/SpliceKit/Final Cut Pro Creator Studio.app
MODDED_APP = $(shell if [ -d "$(MODDED_APP_STANDARD)" ]; then echo "$(MODDED_APP_STANDARD)"; elif [ -d "$(MODDED_APP_CREATOR)" ]; then echo "$(MODDED_APP_CREATOR)"; else echo "$(MODDED_APP_STANDARD)"; fi)
FW_DIR = $(MODDED_APP)/Contents/Frameworks/SpliceKit.framework
ENTITLEMENTS = entitlements.plist
SILENCE_DETECTOR = $(BUILD_DIR)/silence-detector
TOOLS_DIR = $(HOME)/Applications/SpliceKit/tools
PARAKEET_PKG_DIR = patcher/SpliceKitPatcher.app/Contents/Resources/tools/parakeet-transcriber
PARAKEET_RELEASE_BIN = $(PARAKEET_PKG_DIR)/.build/release/parakeet-transcriber
PARAKEET_DEBUG_BIN = $(PARAKEET_PKG_DIR)/.build/debug/parakeet-transcriber
.PHONY: all clean deploy launch tools
all: $(OUTPUT)
tools: $(SILENCE_DETECTOR)
$(BUILD_DIR):
@mkdir -p $(BUILD_DIR)
$(BUILD_DIR)/lua: | $(BUILD_DIR)
@mkdir -p $(BUILD_DIR)/lua
$(SILENCE_DETECTOR): tools/silence-detector.swift | $(BUILD_DIR)
swiftc -O -suppress-warnings -o $(SILENCE_DETECTOR) tools/silence-detector.swift
@echo "Built: $(SILENCE_DETECTOR)"
# Lua static library — compiled as C (no -fobjc-arc)
$(BUILD_DIR)/lua/%.o: $(LUA_DIR)/%.c | $(BUILD_DIR)/lua
$(CC) $(ARCHS) $(MIN_VERSION) -DLUA_USE_MACOSX -O2 -Wall -c $< -o $@
$(LUA_LIB): $(LUA_OBJS) | $(BUILD_DIR)
libtool -static -o $@ $^
@echo "Built: $(LUA_LIB)"
$(OUTPUT): $(SOURCES) Sources/SpliceKit.h $(LUA_LIB) | $(BUILD_DIR)
$(CC) $(ARCHS) $(MIN_VERSION) $(FRAMEWORKS) $(OBJC_FLAGS) $(LINKER_FLAGS) \
$(INSTALL_NAME) -I Sources -I $(LUA_DIR) \
$(SOURCES) $(LUA_LIB) -o $(OUTPUT)
@echo "Built: $(OUTPUT)"
@file $(OUTPUT)
clean:
rm -rf $(BUILD_DIR)
deploy: $(OUTPUT) $(SILENCE_DETECTOR)
@echo "=== Deploying SpliceKit to modded FCP ==="
@mkdir -p "$(FW_DIR)/Versions/A/Resources"
cp $(OUTPUT) "$(FW_DIR)/Versions/A/SpliceKit"
@# Create framework symlinks (must use cd for relative paths)
@cd "$(FW_DIR)/Versions" && ln -sf A Current
@cd "$(FW_DIR)" && ln -sf Versions/Current/SpliceKit SpliceKit
@cd "$(FW_DIR)" && ln -sf Versions/Current/Resources Resources
@# Create Info.plist if missing
@test -f "$(FW_DIR)/Versions/A/Resources/Info.plist" || \
printf '<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0"><dict><key>CFBundleIdentifier</key><string>com.splicekit.SpliceKit</string><key>CFBundleName</key><string>SpliceKit</string><key>CFBundleVersion</key><string>1.0.0</string><key>CFBundlePackageType</key><string>FMWK</string><key>CFBundleExecutable</key><string>SpliceKit</string></dict></plist>' \
> "$(FW_DIR)/Versions/A/Resources/Info.plist"
@# Add speech recognition usage description for transcript feature
@/usr/libexec/PlistBuddy -c "Add :NSSpeechRecognitionUsageDescription string 'SpliceKit uses speech recognition to transcribe timeline audio for text-based editing.'" "$(MODDED_APP)/Contents/Info.plist" 2>/dev/null || true
@# Deploy tools
@mkdir -p "$(TOOLS_DIR)"
@cp $(SILENCE_DETECTOR) "$(TOOLS_DIR)/silence-detector" 2>/dev/null || true
@if [ -f "$(PARAKEET_RELEASE_BIN)" ]; then \
cp "$(PARAKEET_RELEASE_BIN)" "$(TOOLS_DIR)/parakeet-transcriber"; \
cp "$(PARAKEET_RELEASE_BIN)" "$(FW_DIR)/Versions/A/Resources/parakeet-transcriber"; \
elif [ -f "$(PARAKEET_DEBUG_BIN)" ]; then \
cp "$(PARAKEET_DEBUG_BIN)" "$(TOOLS_DIR)/parakeet-transcriber"; \
cp "$(PARAKEET_DEBUG_BIN)" "$(FW_DIR)/Versions/A/Resources/parakeet-transcriber"; \
fi
@# Copy Lua example scripts
@mkdir -p "$(HOME)/Library/Application Support/SpliceKit/lua/examples"
@mkdir -p "$(HOME)/Library/Application Support/SpliceKit/lua/auto"
@mkdir -p "$(HOME)/Library/Application Support/SpliceKit/lua/lib"
@mkdir -p "$(HOME)/Library/Application Support/SpliceKit/lua/menu"
@cp -n scripts/lua/examples/*.lua "$(HOME)/Library/Application Support/SpliceKit/lua/examples/" 2>/dev/null || true
@cp -n scripts/lua/menu/*.lua "$(HOME)/Library/Application Support/SpliceKit/lua/menu/" 2>/dev/null || true
@cp -n scripts/lua/lib/*.lua "$(HOME)/Library/Application Support/SpliceKit/lua/lib/" 2>/dev/null || true
@sign_identity=$$(security find-identity -v -p codesigning 2>/dev/null | awk '/"Apple Development:/ { print $$2; exit } /"Developer ID Application:/ && developer == "" { developer = $$2 } /[0-9]+\) [0-9A-F]+ "/ && first == "" { first = $$2 } END { if (developer != "") print developer; else if (first != "") print first }'); \
if [ -n "$$sign_identity" ]; then \
echo "Using signing identity: $$sign_identity"; \
else \
sign_identity="-"; \
echo "No local codesigning identity found; falling back to ad-hoc signing"; \
fi; \
if ! codesign --force --sign "$$sign_identity" "$(FW_DIR)" || \
! codesign --force --sign "$$sign_identity" --entitlements $(ENTITLEMENTS) "$(MODDED_APP)"; then \
if [ "$$sign_identity" = "-" ]; then \
exit 1; \
fi; \
echo "Developer signing failed; retrying with ad-hoc signature"; \
codesign --force --sign - "$(FW_DIR)"; \
codesign --force --sign - --entitlements $(ENTITLEMENTS) "$(MODDED_APP)"; \
fi
@codesign --verify --verbose "$(MODDED_APP)" 2>&1
@echo "=== Deployed successfully ==="
launch: deploy
@echo "=== Launching modded FCP with SpliceKit ==="
DYLD_INSERT_LIBRARIES="$(FW_DIR)/Versions/A/SpliceKit" \
"$(MODDED_APP)/Contents/MacOS/Final Cut Pro" &
@echo "FCP launched. Check Console.app for [SpliceKit] messages."
@echo "Connect: echo '{\"jsonrpc\":\"2.0\",\"method\":\"system.version\",\"id\":1}' | nc -U /tmp/splicekit.sock"