summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 98c72a69cc79bb5a297e12da4a120564dc628180 (plain)
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
136
137
138
# Maintainer: Eugene Cherny <iam@oscii.ru>
pkgname=cabbage-git
pkgrel=1 
pkgver=2.0.0r1225
pkgdesc='A framework for audio software development'
arch=('x86_64')
url="http://cabbageaudio.com/"
license=('GPLv3')
makedepends=('freeglut' 'curl' 'jack' 'libxcomposite' 'libxrandr' 'libxcursor'
             'libx11' 'libxinerama' 'mesa' 'gtk3' 'vim' 'dos2unix')
depends=('csound' 'steinberg-vst36')
conflicts=('cabbage')
provides=('cabbage')
source=('git+https://github.com/rorywalsh/cabbage.git#branch=master'
        'git+https://github.com/WeAreROLI/JUCE.git#tag=5.2.0'
        'buildCabbage.patch'
        'cabbage.png'
        'Cabbage.desktop'
        'CabbageLite.desktop')
md5sums=('SKIP'
         'SKIP'
         '123ac4cc22f58bb00e2dd34a290f3156'
         'c3c8e35dd46c86f22a3565aa4dd828a8'
         '35cfc89844c90769f4dc4f8309b340b1'
         'c39a85709e31e03a0850f2e324a4faea')

_projucer_dir="JUCE/extras/Projucer/Builds/LinuxMakefile/build/"
_projucer="${_projucer_dir}/Projucer"

function patch_strings_in_file() {
    # Source (Johan Hedin):
    # http://everydaywithlinux.blogspot.com/2012/11/patch-strings-in-binary-files-with-sed.html
    # Slight modification by Colin Wallace to force the pattern to capture the entire line
    # Usage: patch_strings_in_file <file> <pattern> <replacement>
    # replaces all occurances of <pattern> with <replacement> in <file>, padding
    # <replacement> with null characters to match the length
    # Unlike sed or patch, this works on binary files
    local FILE="$1"
    local PATTERN="$2"
    local REPLACEMENT="$3"

    # Find all unique strings in FILE that contain the pattern 
    STRINGS=$(strings ${FILE} | grep "^${PATTERN}$" | sort -u -r)

    if [ "${STRINGS}" != "" ] ; then
        echo "File '${FILE}' contains strings equal to '${PATTERN}':"

        for OLD_STRING in ${STRINGS} ; do
            # Create null terminated ASCII HEX representations of the strings
            OLD_STRING_HEX="$(echo -n ${OLD_STRING} | xxd -g 0 -u -ps -c 256)00"
            NEW_STRING_HEX="$(echo -n ${REPLACEMENT} | xxd -g 0 -u -ps -c 256)00"

            if [ ${#NEW_STRING_HEX} -le ${#OLD_STRING_HEX} ] ; then
                # Pad the replacement string with null terminations so the
                # length matches the original string
                while [ ${#NEW_STRING_HEX} -lt ${#OLD_STRING_HEX} ] ; do
                    NEW_STRING_HEX="${NEW_STRING_HEX}00"
                done

                # Now, replace every occurrence of OLD_STRING with NEW_STRING 
                echo -n "Replacing ${OLD_STRING} with ${REPLACEMENT}... "
                hexdump -ve '1/1 "%.2X"' ${FILE} | \
                sed "s/${OLD_STRING_HEX}/${NEW_STRING_HEX}/g" | \
                xxd -r -p > ${FILE}.tmp
                chmod --reference ${FILE} ${FILE}.tmp
                mv ${FILE}.tmp ${FILE}
                echo "Done!"
            else
                echo "New string '${NEW_STRING}' is longer than old" \
                     "string '${OLD_STRING}'. Skipping."
            fi
        done
    fi
}

prepare() {
  cd "${srcdir}/cabbage"
  for f in *jucer; do
    sed -i "s@/usr/local/include/csound@/usr/include/csound@g" "$f"
    sed -i "s@/usr/local/lib@/usr/lib@g" "$f"
  done

  b="${srcdir}/cabbage/Builds/LinuxMakefile/buildCabbage"
  sed -i "s@/usr/local/include/csound@/usr/include/csound@g" "$b"
  sed -i "/CabbageBuild\/cabbage.desktop/d" "$b"

  dos2unix "${srcdir}/cabbage/Source/Settings/CabbageSettings.cpp"

  cd "$srcdir"
  patch -p0 < buildCabbage.patch
}

pkgver() {
	cd "${srcdir}/cabbage"
	printf "2.0.0r%s" "$(git rev-list --count HEAD)"
}

build() {
  # Projucer

  sed -i -e "s/JUCER_ENABLE_GPL_MODE 0/JUCER_ENABLE_GPL_MODE 1/" \
            "${srcdir}/JUCE/extras/Projucer/JuceLibraryCode/AppConfig.h"
  cd "${srcdir}/JUCE/extras/Projucer/Builds/LinuxMakefile/"
  make -j4

  # a hack to make Projucer use the system's VST header path
  # TODO replace with patching Projucer sources instead
  patch_strings_in_file "${srcdir}/${_projucer}" "~/SDKs/VST_SDK/VST3_SDK" "/usr/include/vst36"
  # will be replaced with the following once Cabbage is ported to JUCE 5.3.0
  # "${srcdir}/${_projucer_dir}" --set-global-search-path linux vst3Path /usr/include/vst36/

  # Cabage

  cd "${srcdir}/cabbage/Builds/LinuxMakefile"
  ./buildCabbage
}

package() {
  cabbage_install_dir="${srcdir}/cabbage/Builds/LinuxMakefile/install"
  images_dir="${pkgdir}/usr/share/icons/hicolor/512x512/apps"

  install -d "$images_dir"
  for file in "${cabbage_install_dir}"/images/*; do
    install -m644 "$file" "$images_dir"
  done

  install -d "${pkgdir}/usr/bin"
  for file in "${cabbage_install_dir}"/bin/*; do
    install -m755 "$file" "${pkgdir}/usr/bin/"
  done

  install -d "${pkgdir}/usr/share/doc/cabbage"
  cp -r "${cabbage_install_dir}/Examples" "${pkgdir}/usr/share/doc/cabbage"
  chmod -R 755 "${pkgdir}/usr/share/doc/cabbage"

  install -Dm644 Cabbage.desktop "${pkgdir}/usr/share/applications/Cabbage.desktop"
  install -Dm644 Cabbage.desktop "${pkgdir}/usr/share/applications/CabbageLite.desktop"
}