Migration to MIT tool
From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
We use those script / program to update the license of CEGUI sources to MIT. If you need those program to do similar stuff in your project, it's here :)
Driver script
license_change.sh
#!/bin/sh
dir="$1"
license="$2"
filesHeaders=`find $dir -name "*.h"`
filesSources=`find $dir -name "*.cpp"`
files="$filesHeaders $filesSources"
# find the list of file to be converted
for name in $files ;
do
if grep "GNU Lesser" -q $name ;
then
convert="$convert $name"
fi
done
#echo "License file: $license"
#echo "File to update: $convert"
cegui_switch_license $license $convert
Converter
cegui_switch_license.c
#include <ctype.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
int main(int argc, char** argv)
{
FILE* fdl;
size_t licenseSize;
char* licenseData;
char* licenseDataOrg;
int status;
int i;
if (argc < 3)
{
fprintf(stderr, "Usage: %s [license] [File1] [File2] ... [FileN]\n",
argv[0]);
return EXIT_FAILURE;
}
// Load the license file
fdl = fopen(argv[1], "r");
if (fdl == 0)
{
fprintf(stderr, "Unable to open license file '%s': %s\n",
argv[1], strerror(errno));
return EXIT_FAILURE;
}
fseek(fdl, 0, SEEK_END); // I should check the return code
licenseSize = ftell(fdl); // I should check the return code
rewind(fdl); // I should check the return code
licenseDataOrg = licenseData = malloc(licenseSize + 1);
if (licenseData == 0)
{
fclose(fdl);
fprintf(stderr, "Unable to allocate memory\n");
return EXIT_FAILURE;
}
status = fread(licenseData, 1, licenseSize, fdl);
if (status != licenseSize)
{
free(licenseData);
fclose(fdl);
fprintf(stderr, "Unable to load in memory license file\n");
return EXIT_FAILURE;
}
fclose(fdl);
licenseData[licenseSize] = '\0';
// Trim the licenseData
while(isspace(*licenseData))
{
++licenseData;
}
while(isspace(licenseData[licenseSize -1]))
{
licenseData[licenseSize -1] = '\0';
--licenseSize;
}
printf("License:\n[%s]\n", licenseData);
printf("Updating %d files\n", argc - 2);
for(i = 2 ; i < argc ; ++i)
{
// Rename the file
char bakFileName[PATH_MAX];
FILE* source;
FILE* dest;
int state;
int data;
snprintf(bakFileName, PATH_MAX, "%s.bak", argv[i]);
status = rename(argv[i], bakFileName);
if (status != 0)
{
fprintf(stderr, "%s: skipped (rename file '%s' to '%s' failed: %s)\n",
argv[i], argv[i], bakFileName, strerror(errno));
continue;
}
source = fopen(bakFileName, "r");
if (source == 0)
{
fprintf(stderr, "%s: skipped (opening of '%s' failed: %s)\n",
argv[i], bakFileName, strerror(errno));
continue;
}
dest = fopen(argv[i], "w");
if (dest == 0)
{
fprintf(stderr, "%s: skipped (opening of '%s' failed: %s\n",
argv[i], argv[i], strerror(errno));
fclose(source);
continue;
}
// Start the copy
state = 0;
while((data = fgetc(source)) != EOF)
{
switch(state)
{
case 0: // Before anything
if (data == '*')
state = 1;
else
fputc(data, dest);
break;
// On a lu une etoile, est ce la fin du premier commentaire ?
case 1:
if (data == '/')
{
state = 2; // Goto skip license
fputc('*', dest);
fputc('/', dest);
fputc('\n', dest);
fwrite(licenseData, 1, licenseSize, dest);
}
else if (data == '*')
{
fputc('*', dest);
}
else
{
state = 0;
fputc(data, dest);
}
break;
// Virer le second commentaire: la license
case 2: // skip license
if (data == '*')
state = 3;
break;
case 3:
if (data == '/')
state = 4; // Goto Raw copy
else if (data == '*')
state = 3;
else
state = 2;
break;
// Raw copy
case 4:
fputc(data, dest);
break;
}
}
fclose(dest);
fclose(source);
if (state != 4)
{
printf("%s: failed\n", argv[i]);
}
else
{
printf("%s: updated\n", argv[i]);
}
}
free(licenseDataOrg);
return EXIT_SUCCESS;
}
License header
cegui_mit.txt
/*************************************************************************** * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. ***************************************************************************/