open-license-manager / licensecc

Software licensing, copy protection in C++. It has few dependencies and it's cross-platform.
http://open-license-manager.github.io/licensecc/
BSD 3-Clause "New" or "Revised" License
947 stars 300 forks source link

generating projects with lccgen #139

Open SadE54 opened 2 years ago

SadE54 commented 2 years ago

I'm trying to use licgen to create a new project , but I'm not sure how to use it If I'm first trying that: lccgen project init -n POM nothing is happening (no text , even with verbose option)

Do I have to provide a rsa private key (link to .rsa files ? or the keys content in the command line ?)

lccgen project init --primary-key pom_private_key.rsa --public-key pom_public_key.rsa --project-name POM

return nothing :-/

GitHubUserC commented 1 year ago

I have this problem too, can anyone answer?

siddjellali commented 1 year ago

same here ! Project is still live ?

emgstabilis commented 1 year ago

[edited because formatting was garbled by github]

I am not sure about the latest version but here are my notes when I evaluated open-license-manager. I don't guarantee that it will work for you because I did not follow recent developments and I don't know the internal details of open-license-manager.

The documentation of open-license-manager https://open-license-manager.github.io/licensecc/usage/issue-licenses.html suggests to have the executable lcc in your path and organize the project as follows:

projects
└── DEFAULT       #(your project name)
    ├── include
    │   └── licensecc
    │       └── DEFAULT
    │           ├── licensecc_properties.h
    │           └── public_key.h
    ├── licenses
    │   └── test.lic
    └── private_key.rsa

Here, DEFAULT is the project name and would be replaced by MYPROJECT, for example.

The idea is that each project has its settings and licenses. In addition to DEFAULT (which is used for internal tests of open-license-manager), a new project can be added by reconfiguring cmake with the following additional variable -DLCC_PROJECT_NAME=xxx.

When I did so for MYPROJECT , I ended up with the following directory structure:

.
├── DEFAULT
│   ├── include
│   │   └── licensecc
│   │       └── DEFAULT
│   │           ├── licensecc_properties.h
│   │           └── public_key.h
│   └── private_key.rsa
└── MYPROJECT
    ├── include
    │   └── licensecc
    │       └── MYPROJECT
    │           ├── licensecc_properties.h
    │           └── public_key.h
    └── private_key.rsa

Also, lccgen can be used to generate the project (in fact this is how the cmake configuration does it). When I tested this, the same directory structure was generated, but for some reason the file licensecc_properties.h is not created.

From the above structure we see that the build process generated both the public and the private key, by using openssl.

For a start, it can be sufficient to remove the public and private key when rebuilding the project, and this will regenerate both keys.

After compiling the library (cmake --build . --target install --config Release), the structure of the install directory is as follows:

.
├── bin
│   ├── lccgen
│   └── MYPROJECT
│       └── lccinspector
├── include
│   └── licensecc
│       ├── datatypes.h
│       ├── licensecc.h
│       └── MYPROJECT
│           ├── licensecc_properties.h
│           └── public_key.h
└── lib
    ├── cmake
    │   ├── lccgen
    │   │   ├── lccgen-config.cmake
    │   │   ├── license_generator.cmake
    │   │   └── license_generator-release.cmake
    │   └── licensecc
    │       ├── licensecc-config.cmake
    │       └── licensecc-config-version.cmake
    └── licensecc
        └── MYPROJECT
            ├── cmake
            │   ├── licensecc.cmake
            │   └── licensecc-release.cmake
            └── liblicensecc_static.a

There is a global lccgen executable, which is common for all projects, and then a lccinspector specific for each project. I suppose that this is because the hardware identifier strategy is specific for each project, and other variables as well.

Also, the include directory from each project's directory is copied as to the installation include directory, and a static library is generated for each project. Finally, some .cmake files are added for each project, probably to facilitate integration if you know how to use it.

jslyadneva commented 10 months ago

This video may help https://youtu.be/BHb-p-4aaZE?si=_UehJQVSmzQA6fwl