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. ***************************************************************************/