Yosemite에서 Synergy 직접 빌드하여 사용하기

멀티플랫폼간 마우스 및 키보드를 공유해주는 유명한 프로그램인 Synergy(http://synergy-project.org)가 어느새 유료화되었다. 다운로드 페이지로 가보면, 1인당 5달러를 결재하면 평생 사용할 수 있다… 라고는 한다.

하지만 원래 Synergy는 오픈소스 프로젝트다. 그것도 GNU 라이센스가 적용되어 있는 프로젝트이다. 이는 Synergy의 Github 페이지(https://github.com/synergy/synergy)로 가보면 확인할 수 있다. 따라서 그냥 Github에 공개된 코드를 직접 빌드하여 사용하기로 했다. 작업한 환경은 OS X 10.10 Yosemite이다.

http://synergy-project.org/wiki/Compiling 에 가보면 환경별 컴파일 방법이 간단하게 설명되어 있다. 따라서 나는 해당 내용을 따라서 Synergy를 컴파일해서 사용해 보기로 했다.

일단 필요한 의존성 모듈을 설치해야 한다. 나는 brew를 이용해서 cmake, qt를 설치했다.

$ brew install cmake
$ brew install qt

 

의존성 모듈을 설치한 후에, 공식 문서에 나와있는 것과 같이 수행한다.

$ ./hm.sh conf -g1
Mapping command: conf -> configure
Running setup…
Setup complete.
Error: Arg missing: –mac-sdk <version>

 

그럼 위와 같은 오류가 발생한다. mac sdk 옵션이 없어서 발생하는 오류인 듯 싶어 옵션을 주어 실행해봤다.

$ ./hm.sh conf -g1 –mac-sdk 10.10
Mapping command: conf -> configure
Error: Arg missing: –mac-identity <name>

 

이번에는 mac identity 옵션이 없다고 한다. 그럼 준다. 일단 test라고 주었다.

$ ./hm.sh conf -g1 –mac-sdk 10.10 –mac-identity test
Mapping command: conf -> configure
cmake version 3.0.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
Creating dir: build/release
Entering dir: build/release
CMake command: cmake -G “Unix Makefiles” -DCMAKE_BUILD_TYPE=Release ../..
— The C compiler identification is AppleClang 6.0.0.6000054
— The CXX compiler identification is AppleClang 6.0.0.6000054
(중간 생략)
— Looking for pthread_create in pthread
— Looking for pthread_create in pthread – found
— Found CURL: /usr/lib/libcurl.dylib (found version “7.37.1”)
— OSX_TARGET_MAJOR=
— OSX_TARGET_MINOR=
CMake Error at CMakeLists.txt:168 (message):
Mac OS X target must be 10.x
— Configuring incomplete, errors occurred!
See also “/Users/nesswit/Downloads/synergy-master/build/release/CMakeFiles/CMakeOutput.log”.
Going back to: /Users/nesswit/Downloads/synergy-master
Error: CMake encountered error: 256

 

색다른 오류가 나를 반겼다. 보아하니 OSX_TARGET_MAJOR와 OSX_TARGET_MINOR 옵션이 적용이 되지 않은듯 했다.

이를 해결하기 위한 간단한 patch 파일을 작성했다. 자세한 내용은 아래와 같다.

 

해당 패치를 적용하고 실행한 결과는 아래와 같다.

$ ./hm.sh conf -g1 –mac-sdk 10.10 –mac-identity test
Mapping command: conf -> configure
cmake version 3.0.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
Entering dir: build/release
CMake command: cmake -G “Unix Makefiles” -DCMAKE_BUILD_TYPE=Release -DOSX_TARGET_MAJOR=10 -DOSX_TARGET_MINOR=10 ../..
— OSX_TARGET_MAJOR=10
— OSX_TARGET_MINOR=10
— Configuring done
— Generating done
— Build files have been written to: /Users/nesswit/Downloads/synergy-master/build/release
Going back to: /Users/nesswit/Downloads/synergy-master
QMake command: qmake gui.pro -r -spec macx-g++ “MACX_LIBS=-framework ApplicationServices -framework Security -framework cocoa -framework ServiceManagement” QMAKE_MACOSX_DEPLOYMENT_TARGET=10.10 QMAKE_MAC_SDK=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk
Entering dir: src/gui
Going back to: /Users/nesswit/Downloads/synergy-master

 

생각대로 잘 동작한다. 이대로 빌드를 진행하자.

$ ./hm.sh build
Entering dir: build/release
Scanning dependencies of target arch
[ 0%] Building CXX object src/lib/arch/CMakeFiles/arch.dir/Arch.cpp.o
(중간 생략)
Log: Deploying plugins from “/usr/local/plugins”
Log: Created configuration file: “Synergy.app/Contents/Resources/qt.conf”
Log: This file sets the plugin search path to “Synergy.app/Contents/PlugIns”
Going back to: /Users/nesswit/Downloads/synergy-master
Error: [Errno 2] No such file or directory: ‘/Library/Frameworks/QtCore.framework/Contents/Info.plist’

 

내가 설치한 qt는 brew로 설치했기 때문에 /Library/Frameworks/ 아래에 있지 않다. 따라서 해당 경로를 수정해야 한다.

이는 아까 패치파일을 적용한 ext/toolchain/commands1.py 파일의 826번째 줄 쯤에 있다. 해당 코드를 아래와 같이 수정한다.

 

이후, clean한 후 root 권한으로 다시 빌드했다.

$ ./hm.sh clean
(생략)
$ sudo ./hm.sh build
Entering dir: build/release
[ 0%] Building CXX object src/lib/arch/CMakeFiles/arch.dir/Arch.cpp.o
(중간 생략)
WARNING: Plugins = PlugIns
Going back to: /Users/nesswit/Downloads/synergy-master

 

경고.. 가 뜨지만 더 이상은 그냥 무시하기로 했다.

그럼, 정상적으로 생성된 Synergy.app 파일을 bin 폴더에서 확인할 수 있다.




  • Pingback: 自行編譯 Synergy 來試用 | Tsai I-Ta's Blog()

  • JuYoung Lee

    시너지 위키타고왔는데 한글이 있어서 당황 … ㅎㅎ 잘보고 갑니다ㅎㅎ

    • nesswit

      시너지 위키에 링크가 되어있나요? 처음 알았네요 ㄷㄷ

  • On the current master branch there is no fixXcodeProject method, the path cant be applied, and even if applied manually it doesnt work

  • patch 파일은 어떻게만들어서 적용하는건가요 ㅠ

  • divbyzero

    Instructions for English speakers wanting to build Synergy for MacOS 10.10, as of 2015-06-12:

    1. Remove the “build” directory left over from any unsuccessful previous build.
    2. Edit “ext/toolchain/commands1.py”.
    2.1. Find the section which mentions “OSX_TARGET_MAJOR”.
    2.2. Change the surrounding “elif” to be an “if”.
    2.3. Find the section which mentions “frameworkRootDir” inside an “if qMajor <= 4".
    2.4. Change the value of frameworkRootDir to be "/usr/local/Cellar/qt/4.8.6/Frameworks".
    3. Run "./hm.sh conf -g1 –mac-sdk 10.10 –mac-identity test && ./hm.sh build".

  • Owen Carter

    I just got 1.8.1 beta running under el-capitain with:

    ./hm.sh conf -g2 –mac-sdk 10.11 –mac-identity El-Capitain
    And putting..
    frameworkRootDir = “/usr/local/Cellar/qt/4.8.7_2/Frameworks/”
    ..in commands1.py

    • Mark R.

      I tried those steps, but I’m getting this error:

      Error: [Errno 2] No such file or directory: ‘/Library/Frameworks/QtCore.framework/Contents/Info.plist’

      I used brew to install QT and I verified that the /usr/local/Cellar/qt/4.8.7_2/Frameworks path exists. What could I be missing?

      I should mention that I’m trying to build version 1.7.6.

      • Mark R.

        Oops. It was my fault. I set the value of frameworkRootDir on the wrong line.

        Thanks for the instructions, Owen!

  • 피타가우스

    좋은 자료 감사합니다. 포스팅 덕분에 빌드까지 완료했습니다.
    그런데 bin 폴더에서 synergy 를 실행시키니깐 창은 뜨는데 빈 화면으로 아무것도 나오지가 않습니다.
    이런 경험은 없으셨나요?

    • Nesswit

      너무 오래 전에 했던 작업이라 그런지 기억이 잘 나지 않습니다.
      재작년 쯤 시너지를 결제해서 사용하다가 현재는 kvm 스위치를 구매하여 사용하고 있어 시너지는 사용하고 있지 않아 다시 사용할 날이 오기 전까지는 확인하기 어려울 것 같습니다.