Dap.Bluetooth: Extract Gnome specific component
[banshee-community-extensions:banshee-community-extensions.git] / create-extension
1 #!/usr/bin/perl
2
3 use Getopt::Long;
4
5 # Functions
6 sub replace {
7     my $file = shift;
8     my $old = shift;
9     my $new = shift;
10     #print "sed -i \"s/$old/$new/\" $file\n";
11     print `sed -i "s/$old/$new/g" $file`;
12 }
13
14 # Execution starts here
15 my $name;
16 my $fsharp;
17
18 GetOptions ("fsharp" => \$fsharp);
19
20 $name = $ARGV[0];
21 if (!$name || $name eq '') {
22     print "name: $name\n";
23     print "Usage:  ./create-extension [--fsharp] EXTENSION_NAME\n\n";
24     print "Example: ./create-extension AlarmClock\n";
25     exit ();
26 }
27
28 if ($name !~ m/^[A-Z][a-zA-Z0-9]+$/) {
29     print "name should start with upper-case letter, and consist only of letters and numbers\n";
30     exit ();
31 }
32
33 my $dir = "src/$name";
34
35 if (-d $dir || -e $dir) {
36     print "$dir already exists; remove it or choose a new name\n";
37     exit ();
38 }
39
40 my $ext = "cs";
41 my $proj_type = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}";
42 if ($fsharp) {
43     $ext = "fs";
44     $proj_type = "{4925A630-B079-445d-BCD4-3A9C94FE9307}";
45 }
46
47 # TODO ensure the working copy of git is clean
48
49 print "Creating new extension: '$name'\n";
50 print ('=' x 80);
51 print "\n\n";
52 print `mkdir -p $dir`;
53
54 print `cp -R build/extension-templates/$ext/* $dir/`;
55
56 # Rename files appropriately
57 my $name_source = $name . 'Source';
58 print `mv $dir/Banshee.Template/TemplateSource.$ext $dir/Banshee.Template/$name_source.$ext`;
59 print `mv $dir/Banshee.Template/ $dir/Banshee.$name`;
60 print `mv $dir/Template.addin.xml $dir/$name.addin.xml`;
61 print `mv $dir/Template.${ext}proj $dir/$name.${ext}proj`;
62
63 # Replace the GUID
64 if (not -f "build/gen-guid.exe") {
65     `gmcs build/gen-guid.cs`;
66 }
67 my $guid = `mono build/gen-guid.exe`; chomp($guid); $guid = uc($guid);
68 replace ("$dir/$name.${ext}proj", "TEMPLATE-GUID", $guid);
69
70 # Replace the extension name
71 replace ("$dir/Makefile.am",                        "EXTENSION-NAME", $name);
72 replace ("$dir/$name.addin.xml",                    "EXTENSION-NAME", $name);
73 replace ("$dir/$name.${ext}proj",                   "EXTENSION-NAME", $name);
74 replace ("$dir/Banshee.$name/$name_source.${ext}",  "EXTENSION-NAME", $name);
75
76 # Add to configure.ac
77 replace ("configure.ac", 'src\\/Makefile', 'src\\/Makefile\nsrc\\/' . $name. '\\/Makefile');
78 replace ("configure.ac", "Extensions:", 'Extensions:\n    ' . $name . ':' . (' ' x (20 - length($name))) . "yes");
79
80 # Add to src/Makefile.am
81 my $subdirs = "SUBDIRS = \\\\\\";
82 replace ("src/Makefile.am", $subdirs, $subdirs . ' \n    ' . $name . ' \\\\\\');
83 replace ("src/Makefile.am", " \$", "");
84
85 # Add to Extensions.sln
86 replace ("Extensions.sln", "Visual Studio 2010", 'Visual Studio 2010\n' .
87          'Project(\"' . $proj_type . '\") = \"' . $name . '\", \"src\\\\\\'. $name . '\\\\\\' . $name . '.' . $ext . 'proj\", \"{' . $guid . '}\"\nEndProject');
88 replace ("Extensions.sln", "postSolution", 'postSolution\n'.
89         "\t\t{$guid}.Debug|x86.ActiveCfg = Debug|Any CPU".'\n'.
90                 "\t\t{$guid}.Debug|x86.Build.0 = Debug|Any CPU".'\n'.
91                 "\t\t{$guid}.Release|x86.ActiveCfg = Release|Any CPU".'\n'.
92                 "\t\t{$guid}.Release|x86.Build.0 = Release|Any CPU");
93
94 # Add everything to git, ready to commit
95 print `git add configure.ac src/Makefile.am Extensions.sln`;
96 print `git add $dir/`;
97 #print `git commit -m "[$name] Initial skeleton"`;
98
99 # run autogen.sh
100 print "Running ./autogen.sh\n";
101 `./autogen.sh` || die "Failed running ./autogen.sh - run it yourself to get the error";
102
103 # run make
104 print "Running make";
105 `make -s`;
106
107 print "\n\n";
108 print ("=" x 80);
109 print "\n";
110 print ("=" x 80);
111 print "\nYour extension has been created, and all the necessary files ready \n";
112 print "to commit to git:\n\n";
113
114 print `git status`;
115
116 print "\nYou can commit it now, or after you've started customizing it!\n";
117
118 print "\nYou can undo the creation of this extension, and revert to the last commit with\n";
119 print "git reset --hard HEAD\n";
120
121 print "\nYou can run Banshee with your newely created extension right now!  Just run:\n";
122 print "make run\n";
123
124 print "\nNOTE: Do not forget to enable your extension within Preferences > Extensions\n";