Abstract-Product line engineering is a reuse-driven development paradigm based on the management of variability, which was successfully applied in information systems engineering and other domains. A common way to represent variability is with variability models that describe artefacts, and the dependencies between their various inflexions. Constraint programming, and in particular Boolean constraint programming, has been used so far to support analysis of variability models such as Feature-Oriented Domain Analysis (FODA) and the like. This paper goes a step further by using constraint programming to specify product lines. The focus on variability, variation points or dependencies is switched to the concept of constraints that apply to variables. The paper shows that this approach is richer than the one based on dependencies. For instance, many constraints that were needed in the cases we explored cannot be specified with dependencies of existing product line modelling languages. The approach was implemented in a prototype tool, and its scalability explored with industry case studies. These experiments show that constraint programming encompasses existing product line modelling languages such as FODA or OVM (Orthogonal Variability Model) and opens way to new possibilities such as reasoning simultaneously with different models during domain or application engineering.